home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 January / CHIP Turkiye Ocak 1998.iso / ARACLAR / LOTUSORG / ACROREAD / INSTALL.DSK / SETUPAPI.LSS < prev    next >
Text File  |  1996-05-22  |  138KB  |  3,780 lines

  1. ''/*********************************************************************
  2. ''
  3. ''   Module Name:   setupapi.lss
  4. ''
  5. ''   Module Code:   TOOLKIT
  6. ''
  7. ''   Author:              
  8. ''
  9. ''   Creation Date:  Aug 31, 1993
  10. ''
  11. ''   Copyright Lotus Development Corporation, (c) 1991
  12. ''
  13. ''
  14. ''  
  15. ''   Description: 
  16. ''     Lotus script file for common install
  17. ''   
  18. ''   
  19. ''   Additional authors:
  20. ''
  21. ''   Change History:
  22. ''   $Log:   //CIT/VOL1/CFLOG/logfiles/cominst/toolkit/setupapi.l@s  $
  23. '' 
  24. ''    Rev 1.113   22 May 1996 15:24:56   jdonohue
  25. '' Replaced LEFTBP calls with LEFT
  26. '' 
  27. ''    Rev 1.112   02 May 1996 09:21:00   glutz
  28. '' Added function RemovePriorVersion() for sspawning Uninstall.
  29. '' 
  30. ''    Rev 1.111   25 Apr 1996 13:57:50   schen
  31. '' backed out addition of closedown function
  32. '' 
  33. ''    Rev 1.109   03 Apr 1996 13:39:08   jdonohue
  34. '' Ref SPR: ODMOO335PU6
  35. '' Added function Lot_DeleteFile and wrappers for old MS Setup functions 
  36. '' FValidFATPath and FValidPath that call Lot_ValidPath
  37. '' 
  38. ''    Rev 1.108   29 Mar 1996 12:34:20   jdonohue
  39. '' Moved  Lot_IsNewShell from lcomstf.dll to mscuistf.dll
  40. '' 
  41. ''    Rev 1.107   29 Feb 1996 13:50:44   jdonohue
  42. '' Ref SPR: SSAO334QY4
  43. '' Changed RegCloseKeyA to RegCloseKey in alias 
  44. '' 
  45. ''    Rev 1.106   28 Feb 1996 12:16:44   jdonohue
  46. '' Added declarations of Lot_RegisterOCX and Lot_UnRegisterOCX
  47. '' 
  48. ''    Rev 1.105   24 Jan 1996 16:17:32   jdonohue
  49. '' Ref SPR:      JHOH327JRZ
  50. '' Fixed error in IsNewShell return value
  51. '' 
  52. ''    Rev 1.104   23 Jan 1996 16:15:22   cmoy
  53. '' HISHI: Merged FE changes
  54. '' 
  55. ''    Rev 1.103   18 Jan 1996 16:51:12   jdonohue
  56. '' Changed IsNewShell function to call C routine Lot_IsNewShell
  57. '' 
  58. ''    Rev 1.102   12 Jan 1996 10:01:16   jdonohue
  59. '' Added flag for server install to shared windows location
  60. '' 
  61. ''    Rev 1.101   28 Dec 1995 10:55:34   jdonohue
  62. '' Replaced MS Setup call CbGetEnvVariableValue with WIn API call GetEnvironmentVariable
  63. '' 
  64. ''    Rev 1.100   21 Dec 1995 14:15:52   jdonohue
  65. '' Removed obsolete functions
  66. '' Replaced MS Setup call CbGetIniKeyString with Windows call 
  67. '' GetPrivateProfileString
  68. '' 
  69. ''    Rev 1.99   Oct 24 1995 16:55:02   cmoy
  70. '' removed eof char
  71. '' 
  72. ''    Rev 1.98   24 Oct 1995 11:33:14   glutz
  73. '' IsLonfDirPath checks validity of symbols before manipulating them.
  74. '' Lot_GetRegKeyValueEx passes local buffer size to GetRegKeyValueEx.
  75. '' 
  76. ''    Rev 1.97   23 Oct 1995 18:25:56   tveerapp
  77. '' Fixed spr#???. TV and PDonahue. Modified Lot_GetRegKeyValue. Checks if the
  78. '' GetRegKeyValue call returned error_success and dwType is not REG_NONE.
  79. '' 
  80. ''    Rev 1.96   22 Oct 1995 17:27:34   cmoy
  81. '' HISHI: Added GetDBCSSymbolValue and GetDBCSListItem functions
  82. '' They are valid for double-byte characters.
  83. '' Reg_GetRootFolder, GetGroupName and PROGMANGROUPCB call them.
  84. '' 
  85. ''    Rev 1.95   22 Sep 1995 12:52:56   jdonohue
  86. '' Changed LdString string size limit back to 255 because of RED limitation
  87. '' 
  88. ''    Rev 1.94   22 Sep 1995 12:17:40   amontalv
  89. '' Check for focus before making change to Program Folder entry in tree from edit line.
  90. '' 
  91. ''    Rev 1.93   15 Sep 1995 17:02:38   glutz
  92. '' SetSybolValue will error out if the symbol name string is empty.
  93. '' 
  94. ''    Rev 1.92   13 Sep 1995 17:09:18   amontalv
  95. '' Moved Lot_RegAppPath from setupapi.lss to toolkit.lss and also added a parameter.
  96. '' Lot_RegAppPath now register the registry entry .
  97. '' 
  98. ''    Rev 1.91   06 Sep 1995 14:07:30   amontalv
  99. '' Have NT create App path entries in Windows so that when the new shell comes along
  100. '' this will be already set.
  101. '' 
  102. ''    Rev 1.90   02 Sep 1995 15:30:32   amontalv
  103. '' Added definition of Lot_CheckPrivileges() which lives in regwrap.c of lotussrc.
  104. '' 
  105. ''    Rev 1.89   31 Aug 1995 12:16:18   jdonohue
  106. '' Added GetDriveType prototype
  107. '' 
  108. ''    Rev 1.88   30 Aug 1995 19:10:42   amontalv
  109. '' Added code to create environment key if it is missing.  Also deal with existing
  110. '' path more intelligently.
  111. '' 
  112. ''    Rev 1.87   29 Aug 1995 08:35:42   jdonohue
  113. '' Fix WEDS2VENXL: Reg_AppPath use SYM_NETCOMPONENT for node
  114. '' 
  115. ''    Rev 1.86   24 Aug 1995 10:24:10   glutz
  116. '' Added function IsLongDirPath to check for long directory names.
  117. '' 
  118. ''    Rev 1.85   23 Aug 1995 16:42:08   amontalv
  119. '' Put a wrapper around EnableWindow to prevent trying to enable null window.
  120. '' 
  121. ''    Rev 1.84   22 Aug 1995 14:04:38   glutz
  122. '' IsDirWritable no longer gets the short path name.
  123. '' 
  124. ''    Rev 1.83   21 Aug 1995 15:41:52   amontalv
  125. '' Put name of registry keys into globals.lss
  126. '' 
  127. ''    Rev 1.82   16 Aug 1995 20:33:10   amontalv
  128. '' Added code to do error messages for registry.
  129. '' 
  130. ''    Rev 1.81   14 Aug 1995 16:47:16   mmeth
  131. '' Modified the functions:
  132. '' SetRegKeyValueEx-->SetRegKeyValueExS  and SetRegKeyValueExD
  133. '' and
  134. '' CreateRegKeyValueEx-->CreateRegKeyValueExS and CreateRegKeyValueExD
  135. '' therefroe the two places where these functions are called have been 
  136. '' modified accordingly.
  137. '' 
  138. ''    Rev 1.80   11 Aug 1995 16:47:50   mmeth
  139. '' FindWindows has changed on WIndows 32 to FindWindowsA
  140. '' 
  141. ''    Rev 1.79   11 Aug 1995 15:04:30   glutz
  142. '' DoesFileExist now calls Lot_DoesFileExist.
  143. '' 
  144. ''    Rev 1.78   09 Aug 1995 16:11:12   jdonohue
  145. '' Added GetLastError declaration
  146. '' 
  147. ''    Rev 1.77   09 Aug 1995 14:46:56   glutz
  148. '' DoesDirExist now calls Lot_DoesDirExist.
  149. '' 
  150. ''    Rev 1.76   08 Aug 1995 17:30:32   jdonohue
  151. '' Added declaration of FGetNameForResourceDLL
  152. '' 
  153. ''    Rev 1.75   03 Aug 1995 15:22:36   amontalv
  154. '' Checked in changes for setting system path on NT.
  155. '' 
  156. ''    Rev 1.74   01 Aug 1995 17:10:40   amontalv
  157. '' Added comments
  158. '' 
  159. ''    Rev 1.73   01 Aug 1995 14:21:44   amontalv
  160. '' Added Lot_RegAppPath().
  161. '' 
  162. ''    Rev 1.72   31 Jul 1995 18:28:24   amontalv
  163. '' Added routine to add App Paths to registry.
  164. '' 
  165. ''    Rev 1.71   27 Jul 1995 11:03:48   amontalv
  166. '' Added call Lot_AddLinkIconToFolder so that icon information can be sent
  167. '' when creating a shortcut.
  168. '' 
  169. ''    Rev 1.70   25 Jul 1995 10:32:04   amontalv
  170. '' Moved ShortPath check to inside of GetShortPathName.
  171. '' 
  172. ''    Rev 1.69   25 Jul 1995 10:16:36   amontalv
  173. '' Put in a check to make sure we got back a value from GetShortPath.
  174. '' 
  175. ''    Rev 1.68   20 Jul 1995 12:57:58   jdonohue
  176. '' Changed CopyFile to FCopyFile, which calls Win32 CopyFile instead of MS-Setup
  177. '' FCopyOneFile
  178. '' 
  179. ''    Rev 1.67   20 Jul 1995 10:50:00   glutz
  180. '' GetFreeSpaceForDrive now returns free space in K bytes, also accepts full
  181. '' paths with either drive letter or UNC volume.
  182. '' 
  183. ''    Rev 1.66   17 Jul 1995 12:17:10   jdonohue
  184. '' Removed trailing blanks from FOpen/CloseLogFile declaration
  185. '' 
  186. ''    Rev 1.65   17 Jul 1995 10:24:52   pdonahue
  187. '' changed registry functions to take variant type buffer.
  188. '' 
  189. ''    Rev 1.64   13 Jul 1995 15:50:14   jdonohue
  190. '' Changed Lot_CleanPath MBCS handling
  191. '' 
  192. ''    Rev 1.63   10 Jul 1995 12:03:54   glutz
  193. '' IsDirWritable now calls Lot_IsDirWritable
  194. '' 
  195. ''    Rev 1.62   29 Jun 1995 11:56:34   glutz
  196. '' Added wrappers for Lot_GetShortPath, Lot_regedit, Lot_CreateIniKeyValue
  197. '' 
  198. ''    Rev 1.61   26 Jun 1995 13:29:12   glutz
  199. '' Added wrapper for Lot_createDirectory
  200. '' 
  201. ''    Rev 1.60   23 Jun 1995 14:39:34   jdonohue
  202. '' Added declaration of FGetHandleForResourceDLL
  203. '' 
  204. ''    Rev 1.59   23 Jun 1995 08:22:16   jdonohue
  205. '' ShowWaitCursor and RestoreCursor does nothing
  206. '' 
  207. ''    Rev 1.58   22 Jun 1995 12:41:26   jdonohue
  208. '' Added FindResource Windows call
  209. '' 
  210. ''    Rev 1.57   21 Jun 1995 21:55:20   amontalv
  211. '' Added GetUserName to get network name as a last resort.
  212. '' 
  213. ''    Rev 1.56   19 Jun 1995 11:20:22   tveerapp
  214. '' Fixed InitFrame. When InitializeFrame returns a 0 , the cmd line
  215. '' processing failed on an argument. Quit script whern InitializeFRame returns
  216. '' 0.
  217. '' 
  218. ''    Rev 1.55   19 Jun 1995 10:27:32   amontalv
  219. '' Put in code to add function to New Folder button and Remove Folder button.  Also
  220. '' fixed some of the selection problems in the tree list.
  221. '' 
  222. ''    Rev 1.54   15 Jun 1995 19:40:46   amontalv
  223. '' Checked for and changed integers passed to C functions.  Changed to longs.
  224. '' 
  225. ''    Rev 1.53   14 Jun 1995 16:31:32   amontalv
  226. '' Fixed problem with NT Program Groups.  Look through the registry for
  227. '' program groups and display them for the user.  Most of the code
  228. '' is in C in lotusui.c.  Put calls to registry functions in regwrap.
  229. '' 
  230. ''    Rev 1.52   13 Jun 1995 11:21:30   jdonohue
  231. '' Fixed typos
  232. '' 
  233. ''    Rev 1.51   08 Jun 1995 16:37:08   jdonohue
  234. '' Added IDCANCEL constant
  235. '' 
  236. ''    Rev 1.50   08 Jun 1995 14:28:50   tveerapp
  237. '' Fixed SendlDlgItemMessageLb declaration.
  238. '' 
  239. ''    Rev 1.49   08 Jun 1995 14:20:36   tveerapp
  240. '' Added SendDlgItemMessageLb which is an alias to SendDlgItemMessage
  241. '' to fix spr # TVEN2PXSJ2.
  242. '' 
  243. ''    Rev 1.48   07 Jun 1995 13:03:24   jdonohue
  244. '' Added prototype for WhatPlatform for calling from script
  245. '' 
  246. ''    Rev 1.47   06 Jun 1995 15:59:16   amontalv
  247. '' We are experiencing problems with LotusScript when we fill buffers with
  248. '' nulls and then pass them to C routines.  For the time being, it is suggested
  249. '' that we fill our buffers with spaces.  To this end (and to make it
  250. '' easier to change back later) I have created a small LotusScript routine
  251. '' named CreateBuffer.  You use it any time you ordinarily would use
  252. '' STRING$(num, 0).  CreateBuffer() just needs the num, it decides what to
  253. '' fill the buffer with (sorry about the grammer).  Right now it fill the
  254. '' buffer with spaces.  Later we will change it back to nulls.  Also look
  255. '' at the routine NullTrim().  It will get rid of final nulls and spaces.
  256. '' You can use this when getting a buffer that has been changed or filled
  257. '' in a external C routine.
  258. '' 
  259. ''    Rev 1.46   05 Jun 1995 16:37:06   amontalv
  260. '' Made changes for migrating to LotusScript version 3.0.37.
  261. '' 
  262. ''    Rev 1.45   01 Jun 1995 15:23:12   pdonahue
  263. '' changed createregkeyvalue to check for 1 if the key exist rather than 0.
  264. '' 
  265. ''    Rev 1.44   01 Jun 1995 14:00:28   amontalv
  266. '' Needed to change the size of the passed arguments to correspond to 4 args
  267. '' no that's 5 args instead of 3.
  268. '' 
  269. ''    Rev 1.43   01 Jun 1995 13:13:14   amontalv
  270. '' Added CreateLink to create shortcuts.
  271. '' 
  272. ''    Rev 1.42   01 Jun 1995 12:39:00   jdonohue
  273. '' Added call to FKillNdialogs3 to replace Microsoft function
  274. '' 
  275. ''    Rev 1.41   01 Jun 1995 11:11:34   pdonahue
  276. '' modified Lot_GetRegKeyValue to pass dwtype,lpbuff and cbuf by reference.
  277. '' 
  278. ''    Rev 1.40   31 May 1995 14:55:56   pdonahue
  279. '' Removed invalid byval references in registry functions
  280. '' 
  281. ''    Rev 1.39   30 May 1995 15:24:56   mzgripce
  282. '' add some ByVal to the reg arguments, add headers to the reg functions and
  283. '' add _ in the name of two Reg functions declarations 
  284. '' 
  285. ''    Rev 1.38   30 May 1995 12:56:32   jdonohue
  286. '' Call to FdoDialog3 for multiple DLLs
  287. '' 
  288. ''    Rev 1.37   30 May 1995 09:26:02   amontalv
  289. '' Added back my changes.  Had not made changes to setupapi.lss to declare
  290. '' functions.
  291. '' 
  292. ''    Rev 1.36   26 May 1995 15:07:40   cmoy
  293. '' added A to regsetkey functions
  294. '' 
  295. ''    Rev 1.35   26 May 1995 14:15:42   pdonahue
  296. '' fixed lot_createregkey.
  297. '' 
  298. ''    Rev 1.34   22 May 1995 23:32:12   amontalv
  299. '' Added browse for Win 95 program folder.
  300. '' 
  301. ''    Rev 1.33   19 May 1995 14:43:42   pdonahue
  302. '' fixed registry function api.
  303. '' 
  304. ''    Rev 1.32   15 May 1995 17:33:24   amontalv
  305. '' Fixed SPR JHOH2RWGQX and JMOY2RXNKM.  Had wrong case on 'b' of function
  306. '' declaration of IsDlgButtonChecked().
  307. '' 
  308. ''    Rev 1.31   15 May 1995 11:38:50   jdonohue
  309. '' Added LdStringInit function to initialize SYM_CUIDLL with list of DLLs and
  310. '' make sure libraries loaded
  311. '' 
  312. ''    Rev 1.31   15 May 1995 11:16:10   jdonohue
  313. '' Added LdStringInit function to initialize SYM_CUIDLL with list of DLLs and 
  314. '' make sure libraries loaded
  315. '' 
  316. ''    Rev 1.30   11 May 1995 17:05:26   tveerapp
  317. '' Changed WriteToFile to a sub.
  318. '' 
  319. ''    Rev 1.29   02 May 1995 17:49:22   mzgripce
  320. '' fix syntax errors in the new feature code
  321. '' 
  322. ''    Rev 1.28   02 May 1995 12:53:02   cmoy
  323. '' Merged c2 into cf build
  324. '' 
  325. ''    Rev 1.29   19 Apr 1995 14:54:56   mheerman
  326. '' Changed the prototype for WinHelp to include the new suffix A to indicate
  327. '' the ASCII version of the call.
  328. '' 
  329. ''    Rev 1.27   21 Apr 1995 10:11:52   pdonahue
  330. '' added Registry wrappers
  331. '' 
  332. ''    Rev 1.28   14 Apr 1995 16:04:06   amontalv
  333. '' Delete space from FRestoreCursor name so that LotusScript could find it in the DLL.
  334. '' 
  335. ''    Rev 1.27   10 Apr 1995 17:54:54   amontalv
  336. '' Had to change some function definitions for script to find functions.
  337. '' 
  338. ''    Rev 1.26F  19 Apr 1995 14:56:58   jdonohue
  339. '' Changed LdString to look in a list of DLLs for string SYM_CUIDLL$
  340. '' Moved Lot_GetNthFieldFromIniString from toolkit.lss
  341. '' 
  342. ''    Rev 1.25   06 Apr 1995 21:02:52   amontalv
  343. '' Changed the exported functions parameters to match those of the new
  344. '' 32 bit functions.  I changed as little as I thought possible.
  345. '' 
  346. '' LSS 32 bit port merge changes.
  347. '' 
  348. ''    Rev 1.24   05 Apr 1995 19:52:54   amontalv
  349. '' Porting to 32 bit.
  350. '' 
  351. ''    Rev 1.23   31 Mar 1995 18:47:32   amontalv
  352. '' Had to make Script file names into Unicode before LotusScript would read
  353. '' them.
  354. '' 
  355. ''    Rev 1.22   07 Jan 1995 16:09:58   jplump
  356. '' 
  357. '' In InitFrame, commented out display of error message
  358. '' (SID_ERR_COMMANDLINE). This message is no longer 
  359. '' needed, especially since we now have a usage screen
  360. '' that will be displayed.
  361. '' SPR JHOH2MPJ6X
  362. '' 
  363. ''    Rev 1.21   05 Dec 1994 16:23:18   mzgripce
  364. '' added FWriteToFile() declaration and WriteToFile()wrapper.
  365. '' 
  366. ''    Rev 1.20   18 Nov 1994 16:12:48   amontalv
  367. '' Japan DBCS: Added some resources to
  368. '' 
  369. ''    Rev 1.19   26 Sep 1994 16:30:44   cmoy
  370. '' No change.
  371. '' 
  372. ''    Rev 1.18   10 Jun 1994 15:19:46   ddupre
  373. '' Removed MB_SYSTEMMODAL flag from ErrorMsg.
  374. '' 
  375. ''    Rev 1.17   10 Jun 1994 14:35:06   ddupre
  376. '' 
  377. '' Added MB_SYSTEMMODAL flag to ErrorMsg subroutine.
  378. '' 
  379. ''    Rev 1.16   03 Jun 1994 12:09:46   cmoy
  380. '' Modified CreateProgmanItem to accept accented characters.
  381. '' 
  382. ''    Rev 1.15   26 May 1994 18:35:18   cmoy
  383. '' 
  384. '' Added ProgmanManageGroup declaration.
  385. '' 
  386. ''    Rev 1.14   25 May 1994 17:05:06   mzgripce
  387. '' suppress the remove failed message 
  388. '' 
  389. ''    Rev 1.13   25 May 1994 14:39:38   cmoy
  390. '' 
  391. '' added FindWindow declaration
  392. '' 
  393. ''    Rev 1.12   12 May 1994 11:25:38   mmeth
  394. '' Adding Icons for Lic and Install and using DoMsgBox instead of MessageBox
  395. '' 
  396. ''    Rev 1.11   02 May 1994 16:09:52   ddupre
  397. '' Removed debug comments from PopAll subroutine. -- JGreene
  398. '' 
  399. '' 
  400. ''    Rev 1.10   02 May 1994 13:57:08   mmeth
  401. '' SetFoxu & GetParent are public
  402. '' 
  403. ''    Rev 1.8   24 Apr 1994 14:41:18   cmoy
  404. '' Fixed problem of "vanishing" Error Msg Box.
  405. '' Added MB_SYSTEMMODAL to specification of type of message box
  406. '' to put up in SUB ErrorMsg
  407. '' 
  408. ''    Rev 1.7   13 Apr 1994 09:43:02   cmoy
  409. '' 
  410. '' Added Rebooting return codes and declarations used in 
  411. '' the modification of AUTOEXEC.BAT
  412. '' 
  413. ''    Rev 1.6   08 Apr 1994 11:34:20   mmeth
  414. '' cleanedup error messages
  415. '' 
  416. ''    Rev 1.5   28 Mar 1994 17:03:48   thangv
  417. '' Added the ASSERT statement to LdString function. Removed the if.
  418. '' 
  419. ''    Rev 1.4   26 Mar 1994 16:33:18   p3
  420. '' Datalens Install changes for ODBC driver
  421. '' 
  422. ''    Rev 1.3   22 Mar 1994 12:37:00   mmeth
  423. '' added some more error handling for GetListItem and SetListItem
  424. '' 
  425. ''    Rev 1.2   17 Mar 1994 16:49:08   mmeth
  426. '' added check for LOTUS_DEBUG in shell
  427. '' 
  428. ''    Rev 1.1   16 Mar 1994 17:30:12   mmeth
  429. '' Mariana & Marcel Code Review
  430. '' 
  431. ''    Rev 1.0   11 Feb 1994 10:56:30   jbrodeur
  432. '' Initial Revision
  433. ''----------------------------------------------------------------------
  434. ''   Date     Vers. Pgmr  SPR#  Change
  435. ''----------------------------------------------------------------------
  436. '' 02-06-94   0047  MMETH       Added STFTOGGLE and MsgBox-> MessageB
  437. '' 02-03-94   0046  MMETH       Added logging facilities
  438. ''!
  439. '' 01-26-94   0045  MMETH       changed all string inits to string(...,0)
  440. '' 01-25-94   0044  DND         Move SetRestartDir, RestartListEmpty,
  441. ''                              and ExitExecRestart to toolkit.
  442. '' 01-24-94   0043  TQI              Capture all function returns (lsi36)
  443. '' 01-18-94   0042  MZ          move Lot_CleanPath() from toolkit.lss
  444. '' 01-18-94   0041  DND         Fix any functions that use paths. Also,
  445. ''                              always check for FALSE instead of 0.
  446. '' 01-11-94   0040  TQI         option declare
  447. '' 01-10-94   0039  MZ          Make all symbols Constants and put them
  448. ''                              in GLOBALS.LSS
  449. '' 01-07-94   0038  DND/MZ      Removed lots of functions
  450. '' 12-20-93   0037  tqi         Changes for LSI 34
  451. '' 12-07-93   0036  MZ          replace FRemoveDir() with Dave's function
  452. '' 12-06-93   0035  DND   25705 IsPathWritable Will now look backwards
  453. ''                              for a writable directory. The first directory
  454. ''                              it finds that exists will be the one that
  455. ''                              will be asked to be writable.      
  456. '' 12-05-93   0034  MMETH       Added IDYES & IDNO from windows.h
  457. '' 12-03-93   0033  DND         Fixed the fatal errors. Most all the ERROR
  458. ''                              statements were changed to STFQUIT
  459. '' 12-01-93   0032  DND         Added gStrK and gStrMB. Removed LdStr.
  460. ''                              MakePath returns lower case path. Commented
  461. ''                              out debug error messages in a bunch of
  462. ''                              Lot_ wrappers.
  463. '' 12-01-93   0031  DND         Moved some functions over from new.lss.
  464. ''                              No longer call DoErrMsg. Removed DoErrMsg.
  465. '' 11-24-93   0030  MMETH       Modified GetChapterFromKeyword parm list
  466. '' 11-24-93   0029  MMETH       Removed chptsize% param from Lot_GetChapterFromKeyword
  467. '' 11-22-93   0028  JKEDIA      Defined FIsKeywordInCopyList & FGetChapterFrom
  468. ''                              Keyword and wrote a wrapper for FGetChapterFromKeyWord.
  469. '' 11-19-93   0027  DND         Added the HELP_ constants for WinHelp
  470. '' 11-19-93   0026  MMETH       Replaced LdStrS with LdString
  471. '' 11-19-93   0025  MMETH       Added LdStrS: LdStr will go away soon
  472. '' 11-18-93   0024  JKK         Modified Lot_CheckPath to call FCleanFatPath
  473. ''                              instead of FValidFatPath.
  474. '' 11-17-93   0023  MZ          Added Lot_Dir()
  475. '' 11-15-93   0022  DND         Added F_KEYWORD
  476. '' 11-15-93   0021  JKEDIA      defined NULLSTROK,INVALIDSTROK,NULLSTRERR,INVALIDSTRERR.
  477. ''                              Defined a function called GetAbsPathFromIni.
  478. '' 11-11-93   0020  MMETH       change all Left$ -> RTRIM$ & inited all 
  479. ''                              bufs to 0 insetad of 32s; This fixes Soraya's bug!
  480. '' 11-09-93   0019  Jkedia      took out debugging print statements.
  481. '' 11-09-93   0018  JKEDIA      modified GetWindowsDir & GetWindowsSysdir to
  482. ''                              call FCleanFatPath.
  483. '' 11-08-93   0017  JKEDIA      modified IsWindowsShared to call FcleanFatPath.
  484. '' 11-08-93   0016  JKEDIA      added FCleanFatPath.
  485. '' 11-05-93   0015  MMETH       Uncommented prototype for SetCopyGaugePosition
  486. '' 11-04-93   0014  MMETH       Don't send a help dialog in PopupModelessDialog
  487. '' 11-03-93   0013  DND         Don't send a help dialog in PopupModalDialog
  488. '' 10-25-93   0012  DND         Fixed modeless dialogs. Added UM_PAINTMODELESS
  489. ''                              Added SendMessage prototype.
  490. '' 10-24-93   0011 JKEDIA       changed the value of USERNAME & COMPANYNAME.
  491. '' 10-23-93   0010 Jkedia       Added GetModuleHandle.
  492. '' 10-20-93   0009 Jkedia       Added 3 new prototype for reading and writing
  493. ''                              from .ri file. ReadUserRegistration,WriteUserRegistration,
  494. ''                              ReadSerialNumber. Alse added 2 new Public Const.
  495. ''                              Username & company name.
  496. '' 10-20-93   0010  MMETH      Added Call to FLotusInitialze(LSIRUN(4))
  497. '' 10-20-93   0009  MZ         Add protptype fpr BcfMod()
  498. '' 10-20-93   0009  MMETH       Added Some Window Prototypes
  499. ''                              also added FLotusInitialze LIB "lcomstf.dll"
  500. '' 10-19-93   0008  Jkedia      Added prototype for WinExec and IsdlgButtonChecked.
  501. '' 10-18-93   0007  CHyland     Added SID_ERR.... a whole bunch of them
  502. ''                              All ERrors, now resourced
  503. '' 10-15-93   0006  DND         Changed all the krnl386's to kernel.
  504. ''                              Make sure to only reference the windows
  505. ''                              DLL's by library name - NOT by filename!!!
  506. ''                              If you reference by filename then you will
  507. ''                              not work when krnl386.exe or os2k386.exe
  508. ''                              is loaded.
  509. '' 10-14-93   0005  DND         Added Lot_GetDriveFreeSpaceList
  510. '' 10-11-93   0003    MZ        OpenBookShelfFile,CloseBookShelfFile 
  511. ''                              AddBook
  512. ''  9-17-93   0002   JKK/TV     defined a prototype for LcbGetChapterCost.
  513. ' ' 9-9-93    0001    JKK       changed LSI(4) TO LSI_INFO(4) in RegisterCallBack.
  514. ''  8-12-93   0000              Initial Check-In
  515. ''  9-08-93                     add Lot_SetDateOfFile()
  516. ''
  517. ''----------------------------------------------------------------------
  518. ''
  519. ''*********************************************************************/
  520.  
  521. '**************************************************************************
  522. '*******************************  Windows API's  **************************
  523. '**************************************************************************
  524.  
  525. USE "RESOURCE"
  526. USE "GLOBALS"
  527. OPTION DECLARE
  528.  
  529. '**************************CONSTANTS************************************
  530. 'MS CONSTANTS
  531. '*************
  532. PUBLIC CONST LOGPIXELSY    = 90
  533. PUBLIC CONST SM_CXSCREEN   = 0
  534. PUBLIC CONST SM_CYSCREEN   = 1
  535. PUBLIC CONST WF_80x87      = 1024
  536. PUBLIC CONST PROCESSOR_INTEL_PENTIUM    = 586
  537. PUBLIC CONST PROCESSOR_INTEL_486        = 486
  538. PUBLIC CONST PROCESSOR_INTEL_386        = 386
  539. PUBLIC CONST PROCESSOR_INTEL_860        = 860
  540. PUBLIC CONST WF_STANDARD   = 16
  541. PUBLIC CONST WF_ENHANCED   = 32
  542. PUBLIC CONST USERNAME      = 514
  543. PUBLIC CONST COMPANYNAME   = 515
  544. PUBLIC CONST NULLSTROK     = 0           
  545. PUBLIC CONST INVALIDSTROK  = 0
  546. PUBLIC CONST NULLSTRERR    = 1
  547. PUBLIC CONST INVALIDSTRERR = 1
  548.  
  549. '' TRANSLATED FROM WINDOWS.H for WinHelp
  550. PUBLIC CONST HELP_CONTEXT      = 1
  551. PUBLIC CONST HELP_QUIT         = 2
  552. PUBLIC CONST HELP_INDEX        = 3
  553. PUBLIC CONST HELP_CONTENTS     = 3
  554. PUBLIC CONST HELP_HELPONHELP   = 4
  555. PUBLIC CONST HELP_SETINDEX     = 5
  556. PUBLIC CONST HELP_SETCONTENTS  = 5
  557. PUBLIC CONST HELP_CONTEXTPOPUP = 8
  558. PUBLIC CONST HELP_FORCEFILE    = 9
  559. PUBLIC CONST HELP_KEY          = 257   '0x0101
  560. PUBLIC CONST HELP_COMMAND      = 258   '0x0102
  561. PUBLIC CONST HELP_PARTIALKEY   = 261   '0x0105
  562. PUBLIC CONST HELP_MULTIKEY     = 513   '0x0201
  563. PUBLIC CONST HELP_SETWINPOS    = 515   '0x0203
  564.  
  565. '' DoMsgBox Flags
  566. PUBLIC CONST MB_SYSTEMMODAL      = 4096
  567. PUBLIC CONST MB_TASKMODAL        = 8192
  568. PUBLIC CONST MB_OK                            = &H0000
  569. PUBLIC CONST MB_OKCANCEL                   = &H0001
  570. PUBLIC CONST MB_ABORTRETRYIGNORE = &H0002
  571. PUBLIC CONST MB_YESNOCANCEL             = &H0003
  572. PUBLIC CONST MB_YESNO                      = &H0004
  573. PUBLIC CONST MB_RETRYCANCEL             = &H0005
  574. PUBLIC CONST MB_TYPEMASK                   = &H000F
  575.  
  576. PUBLIC CONST MB_ICONHAND                   = &H0010
  577. PUBLIC CONST MB_ICONQUESTION            = &H0020
  578. PUBLIC CONST MB_ICONEXCLAMATION = &H0030
  579. PUBLIC CONST MB_ICONASTERISK            = &H0040
  580. PUBLIC CONST MB_ICONMASK                   = &H00F0
  581.  
  582. PUBLIC CONST MB_ICONINFORMATION  = MB_ICONASTERISK
  583. PUBLIC CONST MB_ICONSTOP         = MB_ICONHAND
  584.  
  585. PUBLIC CONST IDCANCEL  = 2
  586. PUBLIC CONST IDYES     = 6
  587. PUBLIC CONST IDNO      = 7
  588.  
  589. '************MS Setup Constants 
  590. '
  591. ''Command Option Flags
  592.  
  593. PUBLIC CONST cmoVital       = 1
  594. PUBLIC CONST cmoCopy        = 2
  595. PUBLIC CONST cmoUndo        = 4
  596. PUBLIC CONST cmoRoot        = 8
  597. PUBLIC CONST cmoDecompress  = 16
  598. PUBLIC CONST cmoTimeStamp   = 32
  599. PUBLIC CONST cmoReadOnly    = 64
  600. PUBLIC CONST cmoBackup      = 128
  601. PUBLIC CONST cmoForce       = 256
  602. PUBLIC CONST cmoRemove      = 512
  603. PUBLIC CONST cmoOverwrite   = 1024
  604. PUBLIC CONST cmoAppend      = 2048
  605. PUBLIC CONST cmoPrepend     = 4096
  606. PUBLIC CONST cmoNone        = 0
  607. PUBLIC CONST cmoAll         = 65535
  608.  
  609. ''File Exist Modes
  610.  
  611. PUBLIC CONST femExists     = 0
  612. PUBLIC CONST femRead       = 1
  613. PUBLIC CONST femWrite      = 2
  614. PUBLIC CONST femReadWrite  = 3
  615.  
  616.  
  617. ''Read-Only Return Code
  618.  
  619. PUBLIC CONST ynrcNo         = 0
  620. PUBLIC CONST ynrcYes        = 1
  621. PUBLIC CONST ynrcErr1       = 2
  622. PUBLIC CONST ynrcErr2       = 3
  623. PUBLIC CONST ynrcErr3       = 4
  624. PUBLIC CONST ynrcErr4       = 5
  625. PUBLIC CONST ynrcErr5       = 6
  626. PUBLIC CONST ynrcErr6       = 7
  627. PUBLIC CONST ynrcErr7       = 8
  628. PUBLIC CONST ynrcErr8       = 9
  629. PUBLIC CONST ynrcErr9       = 10
  630.  
  631. ''Rebooting Return Codes
  632. PUBLIC CONST EW_RESTARTWINDOWS = 66 '0x42
  633. PUBLIC CONST EW_REBOOTSYSTEM   = 67 '0x43
  634.  
  635. ''Program Manager Configuration Codes
  636. PUBLIC CONST ADD_GRP = 0
  637.  
  638. ''General Return Codes
  639.  
  640. PUBLIC CONST grcOkay       = 0
  641. PUBLIC CONST grcNotOkay    = 1
  642. PUBLIC CONST grcUserQuit   = 48
  643.  
  644.  
  645. ''Ranges
  646.  
  647. ''CONST cbSymValMax = 8192
  648. PUBLIC CONST cbSymValMax = 512
  649.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  650.     '' but we get Out of String Space wattdrvr error if we alloc
  651.     '' STR$() that big. (See GetSymbolValue and GetListItem)
  652.     '' We should look into using dynamic far alloc instead of
  653.     '' STR$ for large buffers.
  654.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  655.  
  656.  
  657. ''ON ERROR Error Codes
  658. PUBLIC CONST STFERR      = 1024   ''setup system error
  659. PUBLIC CONST STFQUIT     = 1025   ''user quit
  660. PUBLIC CONST STFTOGGLE  = 1026   ''Toggle Error; not fatal at all, just means couldn't toggle
  661.  
  662. PUBLIC CONST scmOff      = 0
  663. PUBLIC CONST scmOnIgnore = 1
  664. PUBLIC CONST scmOnFatal  = 2
  665.  
  666. 'Registration Database Constants
  667. PUBLIC CONST ERROR_SUCCESS        = 0
  668. PUBLIC CONST GRC_API_FAILED       = 104
  669. PUBLIC CONST STILL_ACTIVE         = 259
  670. PUBLIC CONST REG_NONE&                       =    0    '* No value type
  671. PUBLIC CONST REG_SZ&                         =    1     '* Unicode nul terminated string
  672. PUBLIC CONST REG_EXPAND_SZ&                  =    2    '* Unicode nul terminated string
  673.                           '* (with environment variable references)
  674. PUBLIC CONST REG_BINARY&                     =    3     '* Free form binary
  675. PUBLIC CONST REG_DWORD&                      =    4     '* 32-bit number
  676. PUBLIC CONST REG_DWORD_LITTLE_ENDIAN&        =    4     '* 32-bit number (same as REG_DWORD)
  677. PUBLIC CONST REG_DWORD_BIG_ENDIAN&           =    5     '* 32-bit number
  678. PUBLIC CONST REG_LINK&                       =    6     '* Symbolic Link (unicode)
  679. PUBLIC CONST REG_MULTI_SZ&                   =    7     '* Multiple Unicode strings
  680. PUBLIC CONST REG_RESOURCE_LIST&              =   8     '* Resource list in the resource map
  681. PUBLIC CONST REG_FULL_RESOURCE_DESCRIPTOR&   =   9   '* Resource list in the hardware description
  682. PUBLIC CONST REG_RESOURCE_REQUIREMENTS_LIST& =   10 
  683.  
  684. PUBLIC CONST PRIVILEDGE_CHECKFLAG_REGSYSTEMPATH    = 1  '* flag passed to priviledge checking routine
  685.  
  686. PUBLIC CONST HKEY_CLASSES_ROOT&           =    &h80000000
  687. PUBLIC CONST HKEY_CURRENT_USER&           =    &h80000001
  688. PUBLIC CONST HKEY_LOCAL_MACHINE&          =    &h80000002
  689. PUBLIC CONST HKEY_USERS&                  =    &h80000003
  690. PUBLIC CONST HKEY_PERFORMANCE_DATA&       =    &h80000004
  691. PUBLIC CONST HKEY_PERFORMANCE_TEXT&       =    &h80000050
  692. PUBLIC CONST HKEY_PERFORMANCE_NLSTEXT&    =    &h80000060
  693.                                                              
  694.                                                              
  695. '* Registry Specific Access Rights.
  696.  
  697. PUBLIC CONST KEY_QUERY_VALUE         =  &h0001
  698. PUBLIC CONST KEY_SET_VALUE&          =  &h0002
  699. PUBLIC CONST KEY_CREATE_SUB_KEY&     =  &h0004
  700. PUBLIC CONST KEY_ENUMERATE_SUB_KEYS& =  &h0008
  701. PUBLIC CONST KEY_NOTIFY&             =  &h0010
  702. PUBLIC CONST KEY_CREATE_LINK&        =  &h0020
  703. PUBLIC CONST SYNCHRONIZE&            =  &h00100000
  704.  
  705. PUBLIC CONST REG_OPTION_RESERVED&    =      &h00000000  '* Parameter is reserved
  706.  
  707. PUBLIC CONST REG_OPTION_NON_VOLATILE&  =    &h00000000   '* Key is preserved
  708.                              '* when system is rebooted
  709.                                                    
  710. PUBLIC CONST REG_CREATED_NEW_KEY&      =    &h00000001   '* New Registry Key created
  711.  
  712. PUBLIC CONST REG_OPENED_EXISTING_KEY&  =    &h00000002   '* Existing Key opened
  713.  
  714. PUBLIC CONST REG_OPTION_VOLATILE&      =    &h00000001   '* Key is not preserved
  715.                                                                         '* when system is rebooted
  716.                                                   
  717. PUBLIC CONST REG_OPTION_CREATE_LINK&    =    &h00000002     '* Created key is a
  718.                                 '* symbolic link
  719.  
  720. PUBLIC CONST REG_OPTION_BACKUP_RESTORE& =    &h00000004     '* open for backup or restore
  721.                                '* special access rules
  722.                                '* privilege required
  723.  
  724. PUBLIC CONST REG_WHOLE_HIVE_VOLATILE&  =     &h00000001     '* Restore whole hive volatile
  725. PUBLIC CONST REG_REFRESH_HIVE&         =     &h00000002     '* Unwind changes to last flush
  726. PUBLIC CONST REG_NOTIFY_CHANGE_NAME&   =     &h00000001     '* Create or delete (child)
  727. PUBLIC CONST REG_NOTIFY_CHANGE_ATTRIBUTES& =  &h00000002    
  728. PUBLIC CONST REG_NOTIFY_CHANGE_LAST_SET&   =  &h00000004     '* time stamp
  729. PUBLIC CONST REG_NOTIFY_CHANGE_SECURITY&   =  &h00000008 
  730.  
  731. PUBLIC CONST STANDARD_RIGHTS_ALL& = &h001F0000
  732.  
  733.  
  734. PUBLIC CONST KEY_ALL_ACCESS  =   ((STANDARD_RIGHTS_ALL        OR _
  735.                   KEY_QUERY_VALUE            OR _
  736.                   KEY_SET_VALUE              OR _
  737.                   KEY_CREATE_SUB_KEY         OR _
  738.                   KEY_ENUMERATE_SUB_KEYS     OR _
  739.                   KEY_NOTIFY                 OR _
  740.                   KEY_CREATE_LINK)           AND _ 
  741.                  (NOT SYNCHRONIZE))
  742.  
  743.  
  744. ''LOGO
  745. PUBLIC CONST LOGO = 2
  746.  
  747. ''TEMP
  748. PUBLIC CONST SW_HIDE  =  0
  749. PUBLIC CONST SW_SHOW  =  5
  750. PUBLIC CONST SW_SHOWNORMAL = 1
  751. PUBLIC CONST SW_NORMAL = 1
  752. PUBLIC CONST SW_SHOWMINIMIZED= 2
  753. PUBLIC CONST SW_SHOWMAXIMIZED =  3
  754. PUBLIC CONST SW_MAXIMIZE =  3
  755. PUBLIC CONST SW_SHOWNOACTIVATE = 4
  756. PUBLIC CONST SW_MINIMIZE =  6
  757. PUBLIC CONST SW_SHOWMINNOACTIVE = 7
  758. PUBLIC CONST SW_SHOWNA =  8
  759. PUBLIC CONST SW_RESTORE = 9
  760.  
  761.  
  762. '************************GLOBAL VARIABLES*******************************
  763. 'MS GLOBAL VARIABLES
  764.  
  765. DIM     hSetup                  AS INTEGER
  766. %rem
  767. DIM     fFrameInit              AS INTEGER
  768. DIM     fInstallInit    AS INTEGER
  769. %endrem 
  770.  
  771. 'LOTUS GLOBAL VARIABLES
  772. DIM      g_strbuf               AS STRING
  773. PUBLIC gStrK         AS STRING
  774. PUBLIC gStrMB        AS STRING
  775. DIM fLdStringInit       AS INTEGER
  776. PUBLIC gIsSharedWindows%        'Flag is true for server install to shared
  777.                                         'windows environment
  778.  
  779. '**************************C STRUCTS *************************
  780.  
  781. TYPE SysInfoType
  782.     dwOemId AS LONG
  783.     dwPageSize AS LONG
  784.     lpMinimumApplicationAddress AS LONG 
  785.     lpMaximumApplicationAddress AS LONG
  786.     dwActiveProcessorMask AS LONG
  787.     dwNumberOfProcessors AS LONG
  788.     dwProcessorType AS LONG
  789.     dwAllocationGranularity AS LONG
  790.     dwReserved AS LONG
  791. END TYPE
  792.  
  793. '**************************C CALLOUT PROTOTYPES*************************
  794.  
  795. '' SHOULD BE IN 123.LSS, but LotusScript BUG Prevented this!
  796. DECLARE PUBLIC FUNCTION OpenBookShelfFile LIB "FIXBOOK.DLL" ALIAS "_OpenBookShelfFile" (ByVal bookshelfname$) AS INTEGER
  797. DECLARE PUBLIC FUNCTION CloseBookShelfFile LIB "FIXBOOK.DLL" ALIAS "_CloseBookShelfFile" () AS INTEGER
  798. DECLARE PUBLIC FUNCTION AddBook LIB "FIXBOOK.DLL" ALIAS "_AddBook" (ByVal bookpath$, ByVal bookcaption$) AS INTEGER
  799.  
  800. ''this is a call into bcfmod.dll
  801. DECLARE PUBLIC FUNCTION BcfMod LIB "BCFMOD.DLL" ALIAS "_BcfMod@24" (ByVal BcfFilepath$, ByVal DNarg$, ByVal DLarg$, ByVal DCarg$, ByVal ACarg$, ByVal DDarg$) AS LONG
  802. '' NEW!! add call to modify ODBC.INI
  803. DECLARE PUBLIC FUNCTION FixODBCiniSources LIB "BCFMOD.DLL" ALIAS "_FixODBCiniSources@28" (ByVal IniFile$, ByVal Sect1$, ByVal Match1$, ByVal Repl1$, ByVal Sect2$, ByVal Match2$, ByVal Repl2$) AS LONG
  804. '' End NEW!!
  805.  
  806. '** Do to a limitation in LotusScript, these Lotus declarations needed
  807. '** to be here.
  808. DECLARE PUBLIC FUNCTION FCleanFATPath LIB "lcomstf.dll" ALIAS "_FCleanFATPath@4" (ByVal szPath$) AS INTEGER
  809. DECLARE PUBLIC FUNCTION FLotusInitialize LIB "lcomstf.dll" ALIAS "_FLotusInitialize@4" (ByVal sess&) AS INTEGER 
  810. DECLARE PUBLIC FUNCTION WhatPlatform LIB "lcomstf.dll" ALIAS "?WhatPlatform@@YGHXZ" () AS INTEGER 
  811. DECLARE PUBLIC FUNCTION Lot_IsDirWritable LIB "lcomstf.dll" ALIAS "_Lot_IsDirWritable@4" (ByVal szDir$) AS LONG
  812. DECLARE PUBLIC FUNCTION Lot_DoesDirExist LIB "lcomstf.dll" ALIAS "_Lot_DoesDirExist@4" (ByVal szDir$) AS LONG
  813. DECLARE PUBLIC FUNCTION Lot_DoesFileExist LIB "lcomstf.dll" ALIAS "_Lot_DoesFileExist@4" (ByVal szDir$) AS LONG
  814. DECLARE PUBLIC FUNCTION Lot_ExecUninstall LIB "lcomstf.dll" ALIAS "_Lot_ExecUninstall@4" (ByVal szCmd$) AS LONG
  815. DECLARE PUBLIC FUNCTION Lot_RegisterOCX LIB "lcomstf.dll" ALIAS "_Lot_RegisterOCX@4" (ByVal OCXpath$) AS LONG
  816. DECLARE PUBLIC FUNCTION Lot_UnRegisterOCX LIB "lcomstf.dll" ALIAS "_Lot_UnRegisterOCX@4" (ByVal OCXpath$) AS LONG
  817. DECLARE PUBLIC FUNCTION Lot_ValidPath LIB "lcomstf.dll" ALIAS "_Lot_ValidPath@4" (ByVal Path$) AS INTEGER
  818. DECLARE PUBLIC FUNCTION Lot_DeleteFile LIB "lcomstf.dll" ALIAS "_Lot_DeleteFile@8" (ByVal Path$, ByVal cmo%) AS INTEGER
  819.  
  820. ''DBCS support partially from Japan
  821. DECLARE PUBLIC FUNCTION IsDBCSFirstAtOffset LIB "lcomstf.dll" ALIAS "_IsDBCSFirstAtOffset@8" (ByVal szStr$, ByVal cnt&) AS LONG
  822. DECLARE PUBLIC FUNCTION FDBCSCharLen LIB "lcomstf.dll" ALIAS "_FDBCSCharLen@8" (ByVal szStr$, ByVal offset&) AS LONG
  823.  
  824. ''Functions to configure AUTOEXEC.BAT
  825. DECLARE PUBLIC FUNCTION IsShareInstalled LIB "lcomstf.dll" ALIAS "_IsShareInstalled@0" () AS INTEGER
  826. DECLARE PUBLIC FUNCTION ExitWindows LIB "user32" ALIAS "ExitWindows" (ByVal dwReturnCode&, ByVal wReserved&) AS LONG
  827. DECLARE PUBLIC FUNCTION FindWindow LIB "user32" ALIAS "FindWindowA" (ByVal lpszClassName$, ByVal lpszWindow$) AS INTEGER
  828. DECLARE PUBLIC FUNCTION GetUserName LIB "advapi32" ALIAS "GetUserNameA" (ByVal lpszClassName$, wLength&) AS INTEGER
  829.  
  830. ''Functions to configure Program Manager
  831. DECLARE PUBLIC FUNCTION ProgmanManageGroup LIB "mscuistf.dll" ALIAS "_ProgmanManageGroup@8" (ByVal szName$, ByVal fDelete&) AS INTEGER 
  832. DECLARE PUBLIC FUNCTION FAddProgramGroupsToList LIB "mscuistf.dll" ALIAS "_FAddProgramGroupsToList@16" (ByVal hkeyRoot&, ByVal pszKeyName$, ByVal pszListName$, ByVal pszSuppressName$) AS LONG
  833. DECLARE PUBLIC FUNCTION FAddItemToTree LIB "mscuistf.dll" ALIAS "_FAddItemToTree@8" (ByVal hDlg&, ByVal szNewName$) AS INTEGER
  834. DECLARE PUBLIC FUNCTION FDeleteCurrTreeItem LIB "mscuistf.dll" ALIAS "_FDeleteCurrTreeItem@4" (ByVal hDlg&) AS INTEGER
  835. DECLARE PUBLIC FUNCTION FChangeNameCurrTreeItem LIB "mscuistf.dll" ALIAS "_FChangeNameCurrTreeItem@8" (ByVal hDlg&, ByVal NewName$) AS INTEGER
  836.  
  837. '********************** Microsoft DLL Api ***********************************
  838.  
  839. 'JMD
  840. DECLARE PUBLIC FUNCTION FDoDialog3 LIB "msshlstf.dll" ALIAS "_FDoDialog3@16" (ByVal hwnd&, ByVal szDll$, ByVal Dlg&, ByVal szDlgProc$ ) AS INTEGER
  841. DECLARE PUBLIC FUNCTION FKillNDialogs3 LIB "msshlstf.dll" ALIAS "_FKillNDialogs3@4" (ByVal n&) AS INTEGER
  842. DECLARE PUBLIC FUNCTION FGetHandleForResourceDLL LIB "msshlstf.dll" ALIAS "_FGetHandleForResourceDLL@8" (ByVal id%, ByVal t%) AS LONG
  843. DECLARE PUBLIC FUNCTION FGetNameForResourceDLL LIB "msshlstf.dll" ALIAS "_FGetNameForResourceDLL@16" (ByVal id%, ByVal t%, ByVal buffer$, ByVal bufsize&) AS LONG
  844.  
  845. DECLARE PUBLIC FUNCTION FRemoveIniSection LIB "msinsstf.dll" ALIAS "FRemoveIniSection" (ByVal szFile$, ByVal szSect$, ByVal cmo&) AS LONG
  846. DECLARE PUBLIC FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" ALIAS "FCreateIniKeyValue" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal szValue$, ByVal cmo&) AS LONG
  847. DECLARE PUBLIC FUNCTION FRemoveIniKey LIB "msinsstf.dll" ALIAS "FRemoveIniKey" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal cmo&) AS INTEGER
  848. DECLARE PUBLIC FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" ALIAS "FCreateSysIniKeyValue" (ByVal szFile$, ByVal szSect$, ByVal szKey$, ByVal szValue$, ByVal cmo&) AS LONG
  849. DECLARE PUBLIC FUNCTION FCreateProgManGroup LIB "msinsstf.dll" ALIAS "FCreateProgManGroup" (ByVal szGroup$, ByVal szPath$, ByVal cmo&) AS INTEGER
  850. DECLARE PUBLIC FUNCTION FCreateProgManItem LIB "msinsstf.dll" ALIAS "FCreateProgManItem" (ByVal szGroup$, ByVal szItem$, ByVal szCmd$, ByVal cmo&) AS LONG
  851. DECLARE PUBLIC FUNCTION FShowProgManGroup LIB "msinsstf.dll" ALIAS "FShowProgManGroup" (ByVal szGroup$, ByVal szCmd$, ByVal cmo&) AS LONG
  852. DECLARE PUBLIC FUNCTION FStampResource LIB "msinsstf.dll" ALIAS "FStampResource" (ByVal szSect$, ByVal szKey$, ByVal szDst$,_
  853.     ByVal  wResType&, ByVal wResId&, ByVal szData$, ByVal cbData&) AS LONG
  854. DECLARE PUBLIC FUNCTION FAddDos5Help LIB "msinsstf.dll" ALIAS "FAddDos5Help" (ByVal szProgName$, ByVal szProgHelp$, ByVal cmo&) AS LONG
  855. '*OBSOLETE DECLARE PUBLIC FUNCTION YnrcRemoveFile LIB "msinsstf.dll" ALIAS "YnrcRemoveFile" (ByVal szFullPathSrc$, ByVal cmo&) AS LONG
  856. DECLARE PUBLIC FUNCTION YnrcBackupFile LIB "msinsstf.dll" ALIAS "YnrcBackupFile" (ByVal szFullPath$, ByVal szBackup$, ByVal cmo&) AS LONG
  857. DECLARE PUBLIC FUNCTION FInitializeInstall LIB "msinsstf.dll" ALIAS "FInitializeInstall" ( ByVal hinst&, ByVal hwndFrame&) AS LONG
  858. DECLARE PUBLIC FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" ALIAS "WFindFileUsingFileOpen" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  859. DECLARE PUBLIC FUNCTION FIsDirWritable LIB "msinsstf.dll" ALIAS "FIsDirWritable" (ByVal szDir$) AS LONG
  860. DECLARE PUBLIC FUNCTION FIsFileWritable LIB "msinsstf.dll" ALIAS "FIsFileWritable" (ByVal szFile$) AS LONG
  861. DECLARE PUBLIC FUNCTION SetDecompMode LIB "msinsstf.dll" ALIAS "SetDecompMode" (ByVal fMode&) AS LONG
  862. DECLARE PUBLIC FUNCTION GetDecompMode LIB "msinsstf.dll" ALIAS "GetDecompMode" () AS LONG
  863. DECLARE PUBLIC FUNCTION FPrependToPath LIB "msinsstf.dll" ALIAS "FPrependToPath" (ByVal szSrc$, ByVal szDst$, ByVal szDir$, ByVal cmo&) AS LONG
  864. DECLARE PUBLIC FUNCTION SetTimeValue LIB "msinsstf.dll" ALIAS "SetTimeValue" (ByVal usHours&, ByVal usMinutes&, ByVal usSeconds&) AS LONG
  865.  
  866. DECLARE PUBLIC FUNCTION HShowWaitCursor LIB "msshlstf.dll" ALIAS "HShowWaitCursor" () AS LONG
  867. DECLARE PUBLIC FUNCTION FRestoreCursor  LIB "msshlstf.dll" ALIAS "FRestoreCursor" (ByVal hPrev&) AS LONG
  868. DECLARE PUBLIC FUNCTION FSetBitmap LIB "msshlstf.dll" ALIAS "FSetBitmap" (ByVal szDll$, ByVal Bitmap&) AS LONG
  869. DECLARE PUBLIC FUNCTION FSetAbout LIB "msshlstf.dll" ALIAS "FSetAbout" (ByVal szAbout1$, ByVal szAbout2$) AS LONG
  870. DECLARE PUBLIC FUNCTION FSetSymbolValue LIB "msshlstf.dll" ALIAS "FSetSymbolValue" (ByVal szSymbol$,ByVal szValue$) AS LONG
  871. DECLARE PUBLIC FUNCTION InitializeFrame LIB "msshlstf.dll" ALIAS "InitializeFrame" (ByVal szCmdLine$) AS LONG
  872. DECLARE PUBLIC FUNCTION HwndFrame LIB "msshlstf.dll" ALIAS "HwndFrame" () AS LONG
  873. DECLARE PUBLIC FUNCTION HinstFrame LIB "msshlstf.dll" ALIAS "HinstFrame" () AS LONG
  874. DECLARE PUBLIC FUNCTION FWriteToFile LIB "msshlstf.dll" ALIAS "FWriteToFile" (ByVal szFile$, ByVal sz$) AS INTEGER
  875. DECLARE PUBLIC FUNCTION CreateRegKeyEx LIB "msshlstf.dll" ALIAS "CreateRegKeyEx" (ByVal hKey&, ByVal szKey$) AS LONG
  876. DECLARE PUBLIC FUNCTION CreateRegKeyValueExD LIB "msshlstf.dll"ALIAS "CreateRegKeyValueExD" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$,ByVal dwType&, ByVal dwDataLen&, ByVal dwValueData&) AS LONG
  877. DECLARE PUBLIC FUNCTION CreateRegKeyValueExS LIB "msshlstf.dll"ALIAS "CreateRegKeyValueExS" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$,ByVal dwType&, ByVal dwDataLen&, ByVal szValueData$) AS LONG
  878.  
  879. DECLARE PUBLIC FUNCTION DeleteRegKeyEx LIB "msshlstf.dll" ALIAS "DeleteRegKeyEx" (ByVal hKey&,ByVal szKey$) AS LONG
  880. DECLARE PUBLIC FUNCTION DeleteAllSubKeys LIB "msshlstf.dll" ALIAS "DeleteAllSubKeys" (ByVal hKey&, ByVal szKey$) AS LONG
  881. DECLARE PUBLIC FUNCTION DoesRegKeyExistEx LIB "msshlstf.dll" ALIAS "DoesRegKeyExistEx" (ByVal hKey&, ByVal szKey$) AS LONG
  882. DECLARE PUBLIC FUNCTION GetRegKeyValueEx LIB "msshlstf.dll" ALIAS "GetRegKeyValueEx" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal cbBuf&, lpdwBuf&, ByVal lpBuf$) AS LONG
  883. DECLARE PUBLIC FUNCTION SetRegKeyValueExD LIB "msshlstf.dll" ALIAS "SetRegKeyValueExD" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal dwValueData&, ByVal dwDataLen& ) AS LONG
  884. DECLARE PUBLIC FUNCTION SetRegKeyValueExS LIB "msshlstf.dll" ALIAS "SetRegKeyValueExS" (ByVal hKey&,ByVal szSubKey$,ByVal szValueName$, dwType&, ByVal szValueData$, ByVal dwDataLen& ) AS LONG
  885.  
  886. DECLARE PUBLIC FUNCTION Lot_CheckPriviledges LIB "msshlstf.dll" ALIAS "Lot_CheckPriviledges" (ByVal checkflags&) AS LONG
  887.  
  888. DECLARE PUBLIC FUNCTION EercErrorHandler LIB "mscomstf.dll" ALIAS "EercErrorHandler" (ByVal grc&,ByVal fVital&,ByVal  sz1$,ByVal  sz2$,ByVal  sz3$) AS INTEGER
  889. DECLARE PUBLIC FUNCTION FValidFATPath  (ByVal szPath$) AS INTEGER
  890. DECLARE PUBLIC FUNCTION FValidPath  (ByVal szPath$) AS INTEGER
  891. DECLARE PUBLIC FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" ALIAS "FAddSpecialFileToCopyList" (ByVal szSect$, ByVal szKey$, ByVal szSrc$, ByVal szDest$) AS LONG
  892. DECLARE PUBLIC FUNCTION FRemoveSymbol LIB "mscomstf.dll" ALIAS "FRemoveSymbol" (ByVal szSym$) AS LONG
  893. DECLARE PUBLIC FUNCTION CbGetSymbolValue LIB "mscomstf.dll" ALIAS "CbGetSymbolValue" (ByVal szSymbol$, ByVal szValue$,ByVal Length&) AS LONG
  894. DECLARE PUBLIC FUNCTION UsGetListLength LIB "mscomstf.dll" ALIAS "UsGetListLength" (ByVal szSymbol$) AS INTEGER
  895. DECLARE PUBLIC FUNCTION CbGetListItem LIB "mscomstf.dll" ALIAS "CbGetListItem" (ByVal szListSymbol$, ByVal n&, ByVal szListItem$, ByVal cbMax&) AS LONG
  896. DECLARE PUBLIC FUNCTION FAddListItem LIB "mscomstf.dll" ALIAS "FAddListItem" (ByVal szListSymbol$,ByVal szListItem$) AS LONG
  897. DECLARE PUBLIC FUNCTION FReplaceListItem LIB "mscomstf.dll" ALIAS "FReplaceListItem" (ByVal szListSymbol$, ByVal n&, ByVal szListItem$) AS LONG
  898. DECLARE PUBLIC FUNCTION FOpenLogFile    LIB "mscomstf.dll" ALIAS "FOpenLogFile" (ByVal szFile$, ByVal fAppend&) AS LONG
  899. DECLARE PUBLIC FUNCTION FCloseLogFile   LIB "mscomstf.dll" ALIAS "FCloseLogFile" () AS LONG
  900. DECLARE PUBLIC FUNCTION FWriteToLogFile LIB "mscomstf.dll" ALIAS "FWriteToLogFile" (ByVal sz$, ByVal fRequire&) AS LONG
  901. DECLARE PUBLIC FUNCTION DoMsgBox LIB "lcomstf.dll" ALIAS "_DoMsgBox@12" (ByVal lpText$,ByVal lpCaption$,ByVal wType&) AS LONG
  902. DECLARE PUBLIC FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" ALIAS "FParsePathIntoPieces" (ByVal szPath$, ByVal szVol$, ByVal cbVol&, ByVal szDir$, ByVal cbDir&, ByVal szFile$, ByVal cbFile&) AS INTEGER
  903. DECLARE PUBLIC FUNCTION FParsePathIntoPieces LIB "mscomstf.dll" ALIAS "FParsePathIntoPieces" (ByVal szPath$, ByVal szVol$, ByVal cbVol&, ByVal szDir$, ByVal cbDir&, ByVal szFile$, ByVal cbFile&) AS INTEGER
  904.  
  905. DECLARE PUBLIC FUNCTION CbGetVersionOfFile LIB "msdetstf.dll" ALIAS "CbGetVersionOfFile" (ByVal szFile$,ByVal  szBuf$,ByVal cbBuf&) AS LONG
  906. DECLARE PUBLIC FUNCTION LGetVersionNthField LIB "msdetstf.dll" ALIAS "LGetVersionNthField" (ByVal szVersion$,ByVal nField&) AS LONG
  907. DECLARE PUBLIC FUNCTION LcbGetSizeOfFile LIB "msdetstf.dll" ALIAS "LcbGetSizeOfFile" (ByVal szFile$) AS LONG
  908. DECLARE PUBLIC FUNCTION FGetValidDrivesList LIB "msdetstf.dll" ALIAS "FGetValidDrivesList" (ByVal szSymbol$) AS LONG
  909. DECLARE PUBLIC FUNCTION FGetLocalHardDrivesList LIB "msdetstf.dll" ALIAS "FGetLocalHardDrivesList" (ByVal szSymbol$) AS LONG
  910. DECLARE PUBLIC FUNCTION FGetRemovableDrivesList LIB "msdetstf.dll" ALIAS "FGetRemovableDrivesList" (ByVal szSymbol$) AS LONG
  911. DECLARE PUBLIC FUNCTION FGetNetworkDrivesList LIB "msdetstf.dll" ALIAS "FGetNetworkDrivesList" (ByVal szSymbol$) AS LONG
  912. DECLARE PUBLIC FUNCTION LcbTotalDrive LIB "msdetstf.dll" ALIAS "LcbTotalDrive" (ByVal nDrive&) AS LONG
  913. DECLARE PUBLIC FUNCTION LcbFreeDrive LIB "msdetstf.dll" ALIAS "LcbFreeDrive" (ByVal nDrive&) AS LONG
  914. DECLARE PUBLIC FUNCTION FIsValidDrive LIB "msdetstf.dll" ALIAS "FIsValidDrive" (ByVal nDrive&) AS LONG
  915. DECLARE PUBLIC FUNCTION FIsLocalHardDrive LIB "msdetstf.dll" ALIAS "FIsLocalHardDrive" (ByVal nDrive&) AS LONG
  916. DECLARE PUBLIC FUNCTION FIsRemoveDrive LIB "msdetstf.dll" ALIAS "FIsRemoveDrive" (ByVal nDrive&) AS LONG
  917. DECLARE PUBLIC FUNCTION FIsRemoteDrive LIB "msdetstf.dll" ALIAS "FIsRemoteDrive" (ByVal nDrive&) AS LONG
  918. DECLARE PUBLIC FUNCTION FDirExists LIB "msdetstf.dll" ALIAS "FDirExists" (ByVal szDir$) AS LONG
  919. DECLARE PUBLIC FUNCTION FDoesFileExist LIB "msdetstf.dll" ALIAS "FDoesFileExist" (ByVal szFileName$, ByVal mode&) AS LONG
  920. DECLARE PUBLIC FUNCTION CbGetDateOfFile LIB "msdetstf.dll" ALIAS "CbGetDateOfFile" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  921. DECLARE PUBLIC FUNCTION FDoesIniSectionExist LIB "msdetstf.dll" ALIAS "FDoesIniSectionExist" (ByVal szFile$, ByVal szSect$) AS LONG
  922. DECLARE PUBLIC FUNCTION FDoesIniKeyExist LIB "msdetstf.dll" ALIAS "FDoesIniKeyExist" (ByVal szFile$, ByVal szSect$, ByVal szKey$) AS LONG
  923. DECLARE PUBLIC FUNCTION WGetNumWinApps LIB "msdetstf.dll" ALIAS "WGetNumWinApps" () AS LONG
  924. DECLARE PUBLIC FUNCTION FGetParallelPortsList LIB "msdetstf.dll" ALIAS "FGetParallelPortsList" (ByVal szSymbol$) AS LONG
  925. DECLARE PUBLIC FUNCTION FGetSerialPortsList LIB "msdetstf.dll" ALIAS "FGetSerialPortsList" (ByVal szSymbol$) AS LONG
  926. DECLARE PUBLIC FUNCTION FHas87MathChip LIB "msdetstf.dll" ALIAS "FHas87MathChip" () AS LONG
  927. DECLARE PUBLIC FUNCTION FHasMonochromeDisplay LIB "msdetstf.dll" ALIAS "FHasMonochromeDisplay" () AS LONG
  928. DECLARE PUBLIC FUNCTION FHasMouseInstalled LIB "msdetstf.dll" ALIAS "FHasMouseInstalled" () AS LONG
  929. DECLARE PUBLIC FUNCTION WGetConfigSmartdrvSize LIB "msdetstf.dll" ALIAS "WGetConfigSmartdrvSize" () AS LONG
  930. DECLARE PUBLIC FUNCTION WGetConfigRamdriveSize LIB "msdetstf.dll" ALIAS "WGetConfigRamdriveSize" () AS LONG
  931. DECLARE PUBLIC FUNCTION WGetConfigNumBuffers LIB "msdetstf.dll" ALIAS "WGetConfigNumBuffers" () AS LONG
  932. DECLARE PUBLIC FUNCTION WGetConfigNumFiles LIB "msdetstf.dll" ALIAS "WGetConfigNumFiles" () AS LONG
  933. DECLARE PUBLIC FUNCTION WGetConfigLastDrive LIB "msdetstf.dll" ALIAS "WGetConfigLastDrive" () AS LONG
  934. DECLARE PUBLIC FUNCTION FIsDriverInConfig LIB "msdetstf.dll" ALIAS "FIsDriverInConfig" (ByVal szDrv$) AS LONG
  935. DECLARE PUBLIC FUNCTION CbFindTargetOnEnvVar LIB "msdetstf.dll" ALIAS "CbFindTargetOnEnvVar" (ByVal szFile$, ByVal szEnvVar$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  936. DECLARE PUBLIC FUNCTION CbFindFileInTree LIB "msdetstf.dll" ALIAS "CbFindFileInTree" (ByVal szFile$, ByVal szDir$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  937. DECLARE PUBLIC FUNCTION GetTypeFaceNameFromTTF LIB "msdetstf.dll" ALIAS "GetTypeFaceNameFromTTF" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  938. DECLARE PUBLIC FUNCTION GetExistingFOTFileForTTF LIB "msdetstf.dll" ALIAS "GetExistingFOTFileForTTF" (ByVal szFile$, ByVal szBuf$, ByVal cbBuf&) AS LONG
  939.  
  940. DECLARE PUBLIC FUNCTION HinstCui LIB "mscuistf.dll" ALIAS "_HinstCui@0" () AS LONG
  941. DECLARE PUBLIC FUNCTION LoadCommonCtl LIB "mscuistf.dll" ALIAS "_LoadCommonCtl@0" () AS INTEGER
  942. DECLARE PUBLIC FUNCTION CreateLink LIB "mscuistf.dll" ALIAS "_CreateLink@20" (ByVal szPathObj$, ByVal szPathLink$, ByVal pszDesc$, ByVal szArgument$, ByVal szWorkingDir$) AS LONG
  943. DECLARE PUBLIC FUNCTION CreateLinkIcon LIB "mscuistf.dll" ALIAS "_CreateLinkIcon@28" (ByVal szPathObj$, ByVal szPathLink$, ByVal pszDesc$, ByVal szArgument$, ByVal szWorkingDir$, ByVal szIconPath$, ByVal Icon&) AS LONG
  944. DECLARE PUBLIC FUNCTION Lot_FreeDrive LIB "mscuistf.dll" ALIAS "_Lot_FreeDrive@4" (ByVal szDrive$) AS LONG
  945. DECLARE PUBLIC FUNCTION Lot_IsNewShell LIB "mscuistf.dll" ALIAS "_Lot_IsNewShell@0" () AS INTEGER
  946.  
  947. '************ Windows Calls ****************************************
  948.  
  949. DECLARE PUBLIC FUNCTION SendDlgItemMessage LIB "user32" ALIAS "SendDlgItemMessage" (ByVal hDlg&,ByVal idCtrl&,ByVal msg&,ByVal w&,ByVal l&) AS LONG
  950. DECLARE PUBLIC FUNCTION SendDlgItemMessageLb LIB "user32" ALIAS "SendDlgItemMessage" (ByVal hDlg&,ByVal idCtrl&,ByVal msg&,ByVal w&,ByVal lParam$) AS LONG
  951. DECLARE PUBLIC FUNCTION SendMessage LIB "user32" ALIAS "SendMessageA" (ByVal hWnd&,ByVal msg&,ByVal w&,ByVal l&) AS LONG
  952. DECLARE PUBLIC FUNCTION GetTickCount LIB "kernel32" ALIAS "GetTickCount" () AS LONG
  953. DECLARE PUBLIC FUNCTION GetDC LIB "user32" ALIAS "GetDC" (ByVal hWnd&) AS LONG
  954. DECLARE PUBLIC FUNCTION ReleaseDC LIB "user32" ALIAS "ReleaseDC" (ByVal hWnd&, ByVal hDC&) AS LONG
  955. DECLARE PUBLIC FUNCTION GetDeviceCaps LIB "GDI32" ALIAS "GetDeviceCaps" (ByVal hDC&, ByVal nIndex&) AS LONG
  956. DECLARE PUBLIC FUNCTION WinHelp LIB "user32" ALIAS "WinHelpA" (ByVal hwndMain&, ByVal helpfile$, ByVal context&, ByVal ID) AS LONG
  957. DECLARE PUBLIC FUNCTION WinExec LIB "kernel32" ALIAS "WinExec" (ByVal path$, ByVal data&) AS LONG
  958. DECLARE PUBLIC FUNCTION IsDlgbuttonChecked LIB "user32" ALIAS "IsDlgButtonChecked" (ByVal hwnd&, ByVal fEnable&) AS LONG
  959. DECLARE PUBLIC FUNCTION GetWindowsDirectory LIB "kernel32" ALIAS "GetWindowsDirectoryA" (ByVal szBuf$,ByVal cbBuf&) AS LONG
  960. DECLARE PUBLIC FUNCTION GetSystemDirectory LIB "kernel32" ALIAS "GetSystemDirectoryA" (ByVal szBuf$, ByVal cbBuf&) AS LONG
  961. DECLARE PUBLIC FUNCTION GetProfileString LIB "kernel32" ALIAS "GetProfileString" (ByVal szSect$,ByVal szKey$,ByVal  szDefault$,ByVal szBuf$,ByVal cbBuf&) AS LONG
  962. DECLARE PUBLIC FUNCTION GetVersion LIB "kernel32" ALIAS "GetVersion" () AS LONG
  963. DECLARE PUBLIC FUNCTION GetSystemMetrics LIB "user32" ALIAS "GetSystemMetrics" (ByVal nIndex&) AS LONG
  964. DECLARE PUBLIC FUNCTION FindResource LIB "kernel32" ALIAS "FindResourceA" (ByVal hDll&, ByVal Id&, ByVal RType& ) AS LONG
  965. DECLARE PUBLIC FUNCTION Win32CopyFile LIB "kernel32" ALIAS "CopyFileA" (ByVal szSrc$, ByVal szDest$, ByVal cmo%) AS INTEGER
  966. DECLARE PUBLIC FUNCTION GetLastError LIB "kernel32" ALIAS "GetLastError" () AS LONG
  967. DECLARE PUBLIC FUNCTION GetDriveType LIB "kernel32" ALIAS "GetDriveTypeA" (ByVal szPath$) AS INTEGER
  968. DECLARE PUBLIC FUNCTION GetEnvironmentVariable LIB "kernel32" ALIAS "GetEnvironmentVariableA" (ByVal szName$, ByVal szValue$, ByVal Size&) AS LONG
  969.  
  970.  
  971. '*** This functions isn't available on Win32.
  972. 'DECLARE PUBLIC FUNCTION GetWinFlags LIB "kernel32" () AS LONG
  973.  
  974. DECLARE PUBLIC SUB GetSystemInfo LIB "kernel32" ALIAS "GetSystemInfo" ( rSysInf AS SysInfoType )
  975.  
  976. DECLARE PUBLIC FUNCTION LoadLibrary LIB "kernel32" ALIAS "LoadLibraryA" (ByVal path$) AS LONG
  977. DECLARE PUBLIC FUNCTION GetPrivateProfileString LIB "kernel32" ALIAS "GetPrivateProfileStringA" (ByVal szSect$, ByVal szKey$, ByVal szDef$, ByVal szBuf$, ByVal cbBuf&,ByVal szFile$) AS LONG
  978. DECLARE PUBLIC FUNCTION LoadString LIB "user32" ALIAS "LoadStringA" (ByVal hinst&,ByVal TextID&, ByVal Textbuf$, ByVal BufSize&) AS LONG
  979. DECLARE PUBLIC FUNCTION GetModuleHandle LIB "kernel32" ALIAS "GetModuleHandleA" (ByVal path$) AS LONG
  980. DECLARE PUBLIC FUNCTION GetDlgItem LIB "user32" ALIAS "GetDlgItem" (ByVal hwndDlg&, ByVal idControl&) AS LONG
  981. DECLARE PUBLIC FUNCTION IsWindowVisible LIB "user32" ALIAS "IsWindowVisible" (ByVal hwndDlg&) AS INTEGER
  982. DECLARE PUBLIC FUNCTION UpdateWindow LIB "user32" ALIAS "UpdateWindow" (ByVal hwndDlg&) AS INTEGER
  983. DECLARE PUBLIC FUNCTION SetFocus LIB "user32" ALIAS "SetFocus" (ByVal hwndDlg&) AS LONG
  984. DECLARE PUBLIC FUNCTION GetFocus LIB "user32" ALIAS "GetFocus" () AS LONG
  985. DECLARE PUBLIC FUNCTION GetParent LIB "user32" ALIAS "GetParent" (ByVal hwndDlg&) AS LONG
  986.  
  987. ''shell
  988. DECLARE PUBLIC FUNCTION SetWindowText LIB "user32" ALIAS "SetWindowTextA" (ByVal hwnd&, ByVal lpString$) AS INTEGER
  989. DECLARE PUBLIC FUNCTION EnableWindow (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  990. DECLARE PUBLIC FUNCTION WEnableWindow LIB "user32" ALIAS "EnableWindow" (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  991. DECLARE PUBLIC FUNCTION ShowWindow LIB "user32" ALIAS "ShowWindow" (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  992. DECLARE PUBLIC FUNCTION RegSetValue LIB "advapi32" ALIAS "RegSetValueA" (ByVal hKey&, ByVal szSubKey$, ByVal dwType&, ByVal szValue$, ByVal cbValue&) AS LONG
  993. DECLARE PUBLIC FUNCTION RegCloseKey LIB "advapi32" ALIAS "RegCloseKey" (ByVal hKey&) AS LONG
  994.  
  995. '**************************WRAPPRER PROTOTYPES**************************
  996. 'MS WRAPPER PROTOTYPES
  997. 'DECLARE PUBLIC SUB      CreateDir (szDir$, cmo%)
  998. 'DECLARE PUBLIC SUB      RemoveIniSection (szFile$, szSect$, cmo%)
  999. DECLARE PUBLIC SUB       CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  1000. 'DECLARE PUBLIC SUB      RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  1001. 'DECLARE PUBLIC SUB      CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  1002. DECLARE PUBLIC SUB      CreateProgmanGroup (szGroup$, szPath$, cmo%)
  1003. DECLARE PUBLIC SUB      CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  1004. DECLARE PUBLIC SUB      ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  1005. 'DECLARE PUBLIC SUB      StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  1006. 'DECLARE PUBLIC SUB      AddDos5Help (szProgName$, szProgHelp$, cmo%)
  1007. DECLARE PUBLIC SUB      CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  1008. DECLARE PUBLIC SUB      RemoveFile (szFullPathSrc$, cmo%)
  1009. 'DECLARE PUBLIC SUB      BackupFile (szFullPath$, szBackup$)
  1010. 'DECLARE PUBLIC SUB      RenameFile (szFullPath$, szBackup$)
  1011. DECLARE PUBLIC SUB       InitInstall
  1012. DECLARE PUBLIC SUB      OpenLogFile (szFile$, fAppend%)
  1013. DECLARE PUBLIC SUB      CloseLogFile
  1014. DECLARE PUBLIC SUB      WriteToLogFile (szStr$)
  1015. 'DECLARE PUBLIC FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  1016. DECLARE PUBLIC FUNCTION IsDirWritable (szDir$) AS INTEGER
  1017. DECLARE PUBLIC FUNCTION IsFileWritable (szFile$) AS INTEGER
  1018. 'DECLARE PUBLIC SUB      PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  1019.  
  1020. '** Lotus Error functions
  1021. DECLARE PUBLIC SUB      ErrorMsg (nMsg%, szErr$)
  1022. DECLARE PUBLIC SUB      FatalErrorMsg (nMsg%, szErr$, nErr%)
  1023. DECLARE PUBLIC SUB      ErrorMsgNoDlgExit (nMsg%, szErr$)
  1024. DECLARE PUBLIC FUNCTION LdString (TextID%) AS STRING
  1025. DECLARE PUBLIC SUB LdStringInit () 
  1026.  
  1027. %rem
  1028. DECLARE PUBLIC SUB       StfApiErr (nMsg%, szApi$, szArgs$)
  1029. DECLARE PUBLIC SUB       BadArgErr (nArg%, szApi$, szArgs$)
  1030.  
  1031. '' chk arg
  1032. 'DECLARE PUBLIC FUNCTION FValidDrive (szDrive$) AS INTEGER
  1033.  
  1034. 'DECLARE PUBLIC FUNCTION FValidInfSect (szSect$) AS INTEGER
  1035. 'DECLARE PUBLIC FUNCTION FValidIniFile (szFile$) AS INTEGER
  1036.  
  1037. %endrem ''DEBUG
  1038. '' Windows system detect
  1039.  
  1040. DECLARE PUBLIC FUNCTION GetWindowsMajorVersion () AS INTEGER
  1041. DECLARE PUBLIC FUNCTION GetWindowsMinorVersion () AS INTEGER
  1042. DECLARE PUBLIC FUNCTION IsNewShell () AS INTEGER
  1043. DECLARE PUBLIC FUNCTION GetWindowsMode () AS INTEGER
  1044. DECLARE PUBLIC FUNCTION GetWindowsDir  () AS STRING
  1045. DECLARE PUBLIC FUNCTION GetWindowsSysDir () AS STRING
  1046. DECLARE PUBLIC FUNCTION IsWindowsShared () AS INTEGER
  1047. DECLARE PUBLIC FUNCTION GetScreenWidth  () AS INTEGER
  1048. DECLARE PUBLIC FUNCTION GetScreenHeight () AS INTEGER
  1049.  
  1050. '' Detect
  1051. DECLARE PUBLIC FUNCTION IsLongDirPath (szDir$)  AS INTEGER
  1052. DECLARE PUBLIC FUNCTION IsDriveValid (szDrive$) AS INTEGER
  1053. DECLARE PUBLIC FUNCTION IsDriveLocalHard (szDrive$) AS INTEGER
  1054. DECLARE PUBLIC FUNCTION IsDriveRemovable (szDrive$) AS INTEGER
  1055. DECLARE PUBLIC FUNCTION IsDriveNetwork (szDrive$) AS INTEGER
  1056. DECLARE PUBLIC SUB      GetValidDrivesList (szSymbol$)
  1057. DECLARE PUBLIC SUB      GetLocalHardDrivesList (szSymbol$)
  1058. DECLARE PUBLIC SUB      GetRemovableDrivesList (szSymbol$)
  1059. DECLARE PUBLIC SUB      GetNetworkDrivesList (szSymbol$)
  1060. DECLARE PUBLIC FUNCTION GetTotalSpaceForDrive (szDrive$) AS LONG
  1061. DECLARE PUBLIC FUNCTION GetFreeSpaceForDrive (szDrive$) AS LONG
  1062.  
  1063. DECLARE PUBLIC FUNCTION GetEnvVariableValue (szEnvVar$) AS STRING
  1064. DECLARE PUBLIC FUNCTION GetNumWinApps () AS INTEGER
  1065.  
  1066. DECLARE PUBLIC FUNCTION DoesFileExist (szFile$, mode%) AS INTEGER
  1067. DECLARE PUBLIC FUNCTION GetDateOfFile (szFile$) AS STRING
  1068. DECLARE PUBLIC FUNCTION GetYearFromDate (szDate$) AS INTEGER
  1069. DECLARE PUBLIC FUNCTION GetMonthFromDate (szDate$) AS INTEGER
  1070. DECLARE PUBLIC FUNCTION GetDayFromDate (szDate$) AS INTEGER
  1071. DECLARE PUBLIC FUNCTION GetHourFromDate (szDate$) AS INTEGER
  1072. DECLARE PUBLIC FUNCTION GetMinuteFromDate (szDate$) AS INTEGER
  1073. DECLARE PUBLIC FUNCTION GetSecondFromDate (szDate$) AS INTEGER
  1074. DECLARE PUBLIC FUNCTION GetVersionOfFile (szFile$) AS STRING
  1075. DECLARE PUBLIC FUNCTION GetVersionNthField (szVersion$, nField%) AS LONG
  1076. DECLARE PUBLIC FUNCTION GetSizeOfFile (szFile$) AS LONG
  1077. DECLARE PUBLIC FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$) AS STRING
  1078. DECLARE PUBLIC FUNCTION FindFileInTree (szFile$, szDir$) AS STRING
  1079. DECLARE PUBLIC FUNCTION DoesDirExist (szDir$) AS INTEGER
  1080.  
  1081. DECLARE PUBLIC FUNCTION DoesIniSectionExist (szFile$, szSect$) AS INTEGER
  1082. DECLARE PUBLIC FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$) AS INTEGER
  1083. DECLARE PUBLIC FUNCTION GetIniKeyString (szFile$, szSect$, szKey$) AS STRING
  1084.  
  1085. DECLARE PUBLIC FUNCTION GetConfigSmartdrvSize () AS INTEGER
  1086. DECLARE PUBLIC FUNCTION GetConfigRamdriveSize () AS INTEGER
  1087. DECLARE PUBLIC FUNCTION GetConfigNumBuffers () AS INTEGER
  1088. DECLARE PUBLIC FUNCTION GetConfigNumFiles () AS INTEGER
  1089. DECLARE PUBLIC FUNCTION GetConfigLastDrive () AS STRING
  1090. DECLARE PUBLIC FUNCTION IsDriverInConfig (szDrv$) AS INTEGER
  1091.  
  1092. DECLARE PUBLIC FUNCTION GetProcessorType () AS INTEGER
  1093. DECLARE PUBLIC SUB      GetParallelPortsList (szSymbol$)
  1094. DECLARE PUBLIC SUB      GetSerialPortsList (szSymbol$)
  1095. DECLARE PUBLIC FUNCTION Has87MathChip () AS INTEGER
  1096. DECLARE PUBLIC FUNCTION HasMonochromeDisplay () AS INTEGER
  1097. DECLARE PUBLIC FUNCTION HasMouseInstalled () AS INTEGER
  1098. DECLARE PUBLIC SUB      SetBitmap(szDll$, Bitmap%)
  1099. DECLARE PUBLIC SUB      SetAbout(szAbout1$, szAbout2$)
  1100. DECLARE PUBLIC FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  1101. DECLARE PUBLIC SUB      UIPop (n%)
  1102. DECLARE PUBLIC SUB      UIPopAll
  1103. DECLARE PUBLIC SUB      SetTitle (sz$)
  1104. DECLARE PUBLIC SUB      SetSymbolValue (szSymbol$, szValue$)
  1105. DECLARE PUBLIC SUB      RemoveSymbol (szSym$)
  1106. DECLARE PUBLIC FUNCTION GetSymbolValue (szSymbol$) AS STRING
  1107. DECLARE PUBLIC FUNCTION GetListLength(szSymbol$) AS INTEGER
  1108. DECLARE PUBLIC FUNCTION GetListItem(szSymbol$, n%) AS STRING
  1109. DECLARE PUBLIC SUB      AddListItem(szSymbol$, szItem$)
  1110. DECLARE PUBLIC SUB      ReplaceListItem(szSymbol$, n%, szItem$)
  1111. DECLARE PUBLIC FUNCTION InitFrame (szCmdLine$) AS INTEGER
  1112. DECLARE PUBLIC FUNCTION InitSetup (szCmdLine$) AS INTEGER
  1113. DECLARE PUBLIC FUNCTION ShowWaitCursor () AS LONG
  1114. DECLARE PUBLIC SUB      RestoreCursor (hPrev&)
  1115. DECLARE PUBLIC SUB WriteToFile(szFile$,sz$) 
  1116.  
  1117. '** these are some functions to deal with 32 bit type dir names
  1118. DECLARE PUBLIC FUNCTION GetShortPathName(ByVal szLong$, szShort$) AS LONG
  1119. DECLARE PUBLIC FUNCTION Lot_Regedit LIB "lcomstf.dll" ALIAS "_Lot_Regedit@8" (ByVal szFile$,ByVal szFile$) AS LONG
  1120. DECLARE PUBLIC FUNCTION Lot_GetShortPathName LIB "lcomstf.dll" ALIAS "_Lot_GetShortPathName@12" (ByVal szLong$,ByVal szShort$,ByVal cchBuffer&) AS LONG
  1121. DECLARE PUBLIC FUNCTION Lot_CreateIniKeyValue LIB "lcomstf.dll" ALIAS "_Lot_CreateIniKeyValue@20" (ByVal szFile$,ByVal szSect$,ByVal szKey$,ByVal szValue$,ByVal cmo&) AS LONG
  1122.  
  1123.  
  1124. DECLARE PUBLIC FUNCTION Lot_CleanPath (path$) AS INTEGER
  1125. DECLARE PUBLIC FUNCTION Lot_GetNthFieldFromIniString (szLine$, iField%, sp$) AS STRING
  1126.  
  1127. DECLARE PUBLIC FUNCTION Lot_RegCreateKeyEx(   ByVal hKey&, ByVal szKey$) AS LONG
  1128. DECLARE PUBLIC FUNCTION Lot_RegDelAllSubKeys( ByVal hKey&, ByVal szKey$) AS LONG
  1129. DECLARE PUBLIC FUNCTION Lot_DoesRegKeyExistEx(ByVal hKey&, ByVal szKey$) AS LONG
  1130. DECLARE PUBLIC FUNCTION Lot_DeleteRegKeyEx(   ByVal hKey&, ByVal szKey$) AS LONG
  1131. DECLARE PUBLIC FUNCTION Lot_CreateRegKeyValueEx(ByVal hKey&,   ByVal szSubKey$,    ByVal szValueName$,_
  1132.                                                 ByVal dwType&, ByVal lpValueData as variant, ByVal dwDataLen& ) AS LONG
  1133. DECLARE PUBLIC FUNCTION Lot_SetRegKeyValueEx(ByVal hKey&,  ByVal szSubKey$,    ByVal szValueName$,_
  1134.                                               dwType&,ByVal lpValueData, ByVal dwDataLen& ) AS LONG
  1135.  
  1136. DECLARE PUBLIC FUNCTION Lot_GetRegKeyValueEx(ByVal hKey&,  ByVal szSubKey$,ByVal szValueName$,_
  1137.                                              dwType&, lpBuf as variant, cbBuf&) AS LONG
  1138.  
  1139.  
  1140. DECLARE PUBLIC FUNCTION Lot_CreateDirectory LIB "mscuistf.dll" ALIAS "_Lot_CreateDirectory@4" (ByVal szDir$) AS LONG
  1141.  
  1142. DECLARE PUBLIC SUB SetListItem (szSymbol$, n%, szListItem$) 
  1143.  
  1144. DECLARE PUBLIC FUNCTION NullTrim (szString$) AS STRING
  1145. DECLARE PUBLIC FUNCTION CreateBuffer (Length&) AS STRING
  1146.  
  1147. ' called from main to start off everything
  1148. DECLARE PUBLIC SUB SetUpAPI
  1149. DECLARE PUBLIC SUB      ASSERT (assertion%, msg$)
  1150.  
  1151. ''JMD: Replace old MS Setup functions
  1152. PUBLIC FUNCTION FValidFATPath  (ByVal szPath$) AS INTEGER
  1153.     FValidFATPath = Lot_ValidPath (szPath$)
  1154. END FUNCTION
  1155.  
  1156. PUBLIC FUNCTION FValidPath (ByVal szPath$) AS INTEGER
  1157.     FValidPath = Lot_ValidPath (szPath$)
  1158. END FUNCTION
  1159.  
  1160. %rem
  1161. '******************SUPPORT FUNCTIONS ****************************
  1162. PUBLIC FUNCTION LEFTBP(sz$, n%) AS STRING
  1163.    LEFTBP = LEFT$(sz$, n%)
  1164. END FUNCTION
  1165. %endrem
  1166.  
  1167. '****************************************************************
  1168. PUBLIC FUNCTION NullTrim (szString$) AS STRING
  1169.    DIM l%
  1170.  
  1171.    l% = INSTR (szString, CHR$(0))
  1172.    IF l% > 0 THEN
  1173.          NullTrim = RTrim$(LEFT$ (szString, l% - 1))
  1174.    ELSEIF l% = 0 THEN
  1175.          NullTrim = RTrim$(szString)
  1176.    ELSE
  1177.       NullTrim = ""
  1178.    END IF
  1179.  
  1180. END FUNCTION
  1181.  
  1182. '****************************************************************
  1183. ' Need this function to allow us to full buffers with anything
  1184. ' Right now we can't fill them with nulls.
  1185. PUBLIC FUNCTION CreateBuffer (Length&) AS STRING
  1186.  
  1187.     CreateBuffer = STRING$(Length&, " ")
  1188.  
  1189. END FUNCTION
  1190.  
  1191. '***************************WRAPPERS FUNCTIONS AND SUBROUTINES***********
  1192. 'MS WRAPPERS FUNCTIONS AND SUBROUTINES
  1193.  
  1194. PUBLIC FUNCTION InitSetup(szCmdLine$)  AS INTEGER
  1195. '** Purpose: calls InitFrame and InitInstall and sets fFrameInit and 
  1196. '**          fInstallInit flags
  1197. '** Author:
  1198. '** Arguments: szCmdLine$
  1199. '** Returns:   the return of InitFrame call
  1200. '**     
  1201. '*************************************************************************
  1202.     DIM  i%
  1203.  
  1204. %rem
  1205.     fFrameInit = FALSE
  1206.     fInstallInit = FALSE
  1207.  
  1208.     IF hSetup > 0 THEN
  1209.     StfApiErr saeInit, "InitSetup", szCmdLine$
  1210.     END IF
  1211.  
  1212.     i% = InitFrame(szCmdLine$)
  1213.     fFrameInit = 1
  1214.  
  1215.     InitInstall
  1216.     fInstallInit = 1
  1217. %endrem ''DEBUG
  1218.  
  1219.     i% = InitFrame(szCmdLine$)
  1220.     InitInstall
  1221.  
  1222.     InitSetup = i%
  1223. END FUNCTION
  1224. '**************************************************************************
  1225.  
  1226. PUBLIC FUNCTION InitFrame(szCmdLine$)  AS INTEGER
  1227. '** Purpose:    Initialize the frame
  1228. '** Author:
  1229. '** Arguments:  szCmdLine$
  1230. '** Returns:
  1231. '*************************************************************************
  1232.       DIM  i&
  1233.  
  1234.     IF hSetup > 0 THEN
  1235. %rem
  1236.     StfApiErr saeInit, "InitFrame", szCmdLine$
  1237. %endrem ''DEBUG
  1238.     ELSE
  1239.     i& = InitializeFrame(szCmdLine$) 
  1240.     IF i& = -1 THEN
  1241. '           FatalErrorMsg SID_ERR_COMMANDLINE_FORMAT, "", STFQUIT
  1242.         ERROR STFQUIT    
  1243.     ELSEIF i& = 0 THEN
  1244. %rem
  1245.         StfApiErr saeFail, "InitFrame", szCmdLine$
  1246. %endrem ''DEBUG
  1247.         '** TV: return value from cmd line parsing was 0. One of the
  1248.         '** cmd line processing failed. 
  1249.         ERROR STFQUIT    
  1250.         END
  1251.     ELSE
  1252.         InitFrame = CInt(i&)
  1253.     END IF
  1254.     END IF
  1255. END FUNCTION
  1256. '**************************************************************************
  1257.  
  1258. PUBLIC SUB SetBitmap(szDll$, Bitmap%) 
  1259. '** Purpose:
  1260. '** Author:
  1261. '** Arguments: szDll$, Bitmap%
  1262. '*************************************************************************
  1263.     
  1264.     IF FSetBitmap(szDll$, CLng(Bitmap%)) = FALSE THEN
  1265.        ASSERT TRUE, ""
  1266.     END IF
  1267. END SUB
  1268. '**************************************************************************
  1269.  
  1270. PUBLIC SUB SetAbout(szAbout1$, szAbout2$) 
  1271. '** Purpose:
  1272. '** Author:
  1273. '** Arguments: szAbout1$, szAbout2$
  1274. '*************************************************************************
  1275.     IF FSetAbout(szAbout1$, szAbout2$) = FALSE THEN
  1276.     ASSERT TRUE, ""
  1277.     END IF
  1278. END SUB
  1279. '*************************************************************************
  1280.  
  1281. PUBLIC SUB SetTitle(sz$) 
  1282. '** Purpose:
  1283. '** Author:
  1284. '** Arguments: sz$
  1285. '*************************************************************************
  1286.     SetWindowText HwndFrame(), sz$
  1287. END SUB
  1288. '*************************************************************************
  1289.  
  1290. PUBLIC FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$)  AS STRING
  1291. '** Purpose:
  1292. '** Author:
  1293. '** Arguments: szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$
  1294. '** Returns: Value of the symbol for the event, e.g. "ID_OK"
  1295. '**     
  1296. '** NOTE: This version calls FDoDialog3, which allows multiple DLLs    
  1297. '**     
  1298. '*************************************************************************
  1299. %rem
  1300.     if szDll$ = "" then
  1301.     n% = 1
  1302.     elseif szDlgProc$ = "" then
  1303.     n% = 3
  1304.     else
  1305.     n% = 0
  1306.     end if
  1307.     if n% > 0 then
  1308.     BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  1309.     end if
  1310. %endrem ''DEBUG
  1311. '    IF FDoDialog(HwndFrame(), szDll$, CLng(Dlg%), szDlgProc$, CLng(HelpDlg%), szHelpProc$) = FALSE THEN
  1312.     IF FDoDialog3(HwndFrame(), szDll$, CLng(Dlg%), szDlgProc$ ) = FALSE THEN
  1313.     ASSERT TRUE, ""
  1314.     ERROR STFQUIT
  1315.     ELSE
  1316.     UIStartDlg = GetSymbolValue(SYM_DLGEVENT$)
  1317.     END IF
  1318. END FUNCTION
  1319. '*************************************************************************
  1320.  
  1321. PUBLIC SUB UIPop (n%) 
  1322. '** Purpose:
  1323. '** Author:
  1324. '** Arguments: n%
  1325. '*************************************************************************
  1326.     IF FKillNDialogs3(CLng(n%)) = FALSE THEN
  1327.     ASSERT TRUE, ""
  1328.     END IF
  1329. END SUB
  1330. '*************************************************************************
  1331.  
  1332. PUBLIC SUB UIPopAll 
  1333. '** Purpose:
  1334. '** Author:
  1335. '** Arguments: None
  1336. '*************************************************************************
  1337. ' This is not needed if calling FDoDialog3
  1338.     IF FKillNDialogs3(32767) = FALSE THEN
  1339.     ASSERT TRUE, ""
  1340.     END IF
  1341. END SUB
  1342. '*************************************************************************
  1343.  
  1344. PUBLIC FUNCTION GetSymbolValue(szSymbol$)  AS STRING
  1345. '** Purpose:
  1346. '** Author:
  1347. '** Arguments: szSymbol$
  1348. '** Returns:
  1349. '**     
  1350. '*************************************************************************
  1351. %rem
  1352.     if szSymbol$ = "" then
  1353.     BadArgErr 1, "GetSymbolValue", szSymbol$
  1354.     end if
  1355. %endrem ''DEBUG
  1356.  
  1357.     DIM szValue As String : szValue = CreateBuffer(cbSymValMax)
  1358.     DIM Length%
  1359.  
  1360.     Length% = CInt(CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax))
  1361.     IF Length% >= cbSymValMax THEN
  1362.     ErrorMsg SID_ERR_GETSYMBOLVALUE, LSI_INFO(13) & _
  1363.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11)
  1364.     ERROR STFQUIT
  1365.     ELSEIF (Length% = 0) THEN
  1366.     szValue$=""
  1367.     END IF
  1368.  
  1369.     GetSymbolValue = LEFT(szValue$, Length%)
  1370.    
  1371. END FUNCTION
  1372. '*************************************************************************
  1373.  
  1374. PUBLIC FUNCTION GetListLength(szSymbol$)  AS INTEGER
  1375. '** Purpose:
  1376. '** Author:
  1377. '** Arguments: szSymbol$
  1378. '** Returns:
  1379. '**     
  1380. '*************************************************************************
  1381. %rem
  1382.     if szSymbol$ = "" then
  1383.     BadArgErr 1, "GetListLength", szSymbol$
  1384.     end if
  1385. %endrem ''DEBUG
  1386.  
  1387.     GetListLength = UsGetListLength(szSymbol$)
  1388.  
  1389.     IF szSymbol$ = "" THEN
  1390.     ErrorMsg SID_ERR_GETLISTLENGTH, LSI_INFO(13) & _
  1391.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1392.          "GetListLength(" & szSymbol$ & ")"
  1393.     ERROR STFQUIT
  1394.     END IF
  1395. END FUNCTION
  1396. '*************************************************************************
  1397.  
  1398. PUBLIC FUNCTION GetListItem(szListSymbol$, nItem%)  AS STRING
  1399. '** Purpose:
  1400. '** Author:
  1401. '** Arguments: szListSymbol$, nItem%
  1402. '** Returns:
  1403. '**     
  1404. '*************************************************************************
  1405. %rem
  1406.     if szListSymbol$ = "" then
  1407.     BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  1408.     end if
  1409.  
  1410.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  1411.     BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  1412.     end if
  1413. %endrem ''DEBUG
  1414.       DIM szListItem$, Length&
  1415.  
  1416.     szListItem$ = CreateBuffer(cbSymValMax)
  1417.     Length& = CbGetListItem(szListSymbol$, CLng(nItem%), szListItem$, cbSymValMax)
  1418.     GetListItem = szListItem$
  1419.     IF Length& >= cbSymValMax THEN
  1420.     ErrorMsg SID_ERR_GETLISTITEM, LSI_INFO(13) & _
  1421.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1422.          "GetListItem(" & szListSymbol$ & ", " & CSTR(nItem%) & ")"
  1423.     ERROR STFQUIT
  1424.     ELSEIF Length& <= 0 THEN
  1425.     szListItem$ = ""
  1426.     Length& = 0 
  1427.     END IF
  1428.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  1429.     ErrorMsg SID_ERR_GETLISTITEM2, LSI_INFO(13) & _
  1430.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11) & CHR(10) &_
  1431.          "GetListItem(" & szListSymbol$ & ", " & CSTR(nItem%) & ")"
  1432.     ERROR STFQUIT
  1433.     end if
  1434.     GetListItem = LEFT( szListItem$, CInt(Length&) )
  1435. END FUNCTION
  1436. '*************************************************************************
  1437.  
  1438. PUBLIC SUB AddListItem(szSymbol$, szItem$) 
  1439. '** Purpose:
  1440. '** Author:
  1441. '** Arguments: szSymbol$, szItem$
  1442. '*************************************************************************
  1443. %rem
  1444.     if szSymbol$ = "" then
  1445.     BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  1446.     end if
  1447. %endrem ''DEBUG
  1448.     IF FAddListItem(ByVal szSymbol$,ByVal  szItem$) = FALSE THEN
  1449.     ErrorMsg SID_ERR_ADDLISTITEM,_
  1450.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1451.     ERROR STFQUIT
  1452.     END IF
  1453. END SUB
  1454. '*************************************************************************
  1455.  
  1456. PUBLIC SUB ReplaceListItem(szSymbol$, n%, szItem$) 
  1457. '** Purpose:
  1458. '** Author:
  1459. '** Arguments: szSymbol$, n%, szItem$
  1460. '*************************************************************************
  1461. %rem
  1462.     if szSymbol$ = "" then
  1463.     nArg% = 1
  1464.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  1465.     nArg% = 2
  1466.     else
  1467.     nArg% = 0
  1468.     end if
  1469.     if nArg% > 0 then
  1470.     BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  1471.     end if
  1472. %endrem ''DEBUG
  1473.  
  1474.     IF FReplaceListItem(szSymbol$, CLng(n%), szItem$) = FALSE THEN
  1475.     ErrorMsg SID_ERR_REPLACELISTITEM, _
  1476.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1477.     ERROR STFQUIT
  1478.     END IF
  1479. END SUB
  1480. '**************************************************************************
  1481.  
  1482.  
  1483. PUBLIC SUB SetSymbolValue(szSymbol$, szValue$) 
  1484. '** Purpose:
  1485. '** Author:
  1486. '** Arguments: szSymbol$, szValue$
  1487. '*************************************************************************
  1488.     DIM LocalValue$
  1489.     LocalValue$ = TRIM$(szValue$)
  1490. %rem
  1491.     if LocalValue$ = "" then
  1492.     BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  1493.     end if
  1494. %endrem ''DEBUG
  1495.     IF szSymbol$ = "" THEN
  1496.         ErrorMsg SID_ERR_SETSYMBOLVALUE, "Symbol name empty, value is " &  szValue$
  1497.     EXIT SUB
  1498.     END IF
  1499.     IF FSetSymbolValue(szSymbol$, LocalValue$) = FALSE THEN
  1500.     ErrorMsg SID_ERR_SETSYMBOLVALUE, _
  1501.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1502.     ERROR STFQUIT
  1503.     END IF
  1504. END SUB
  1505. '*************************************************************************
  1506.  
  1507. PUBLIC SUB RemoveSymbol(szSym$) 
  1508. '** Purpose:
  1509. '** Author:
  1510. '** Arguments: szSym$
  1511. '*************************************************************************
  1512. %rem
  1513.     if szSym$ = "" then
  1514.     BadArgErr 1, "RemoveSymbol", szSym$
  1515.     end if
  1516. %endrem ''DEBUG
  1517.     IF FRemoveSymbol(szSym$) = FALSE THEN
  1518.     ErrorMsg SID_ERR_REMOVESYMBOL, _
  1519.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1520.     ERROR STFQUIT
  1521.     END IF
  1522. END SUB
  1523. '*************************************************************************
  1524.  
  1525. PUBLIC FUNCTION ShowWaitCursor () AS LONG
  1526. '** Purpose:
  1527. '** Author:
  1528. '** Arguments: None
  1529. '** Returns:
  1530. '**     
  1531. '*************************************************************************
  1532. '    ShowWaitCursor = HShowWaitCursor()
  1533.     ShowWaitCursor = 0
  1534. END FUNCTION
  1535. '*************************************************************************
  1536.  
  1537. PUBLIC SUB RestoreCursor (hPrev&) 
  1538. '** Purpose:
  1539. '** Author:
  1540. '** Arguments: hPrev&
  1541. '*************************************************************************
  1542.     DIM i&
  1543.  
  1544. '  i& = FRestoreCursor(hPrev&)
  1545.   i& = 1
  1546.     IF i& = 0 THEN
  1547.     ErrorMsg SID_ERR_RESTORECURSOR, ""
  1548.     ERROR STFERR
  1549.     END IF
  1550. END SUB
  1551. '*************************************************************************
  1552.  
  1553. PUBLIC SUB InitInstall 
  1554. '** Purpose:
  1555. '** Author:
  1556. '** Arguments: None
  1557. '*************************************************************************
  1558.     IF hSetup > 0 THEN
  1559. %rem
  1560.     StfApiErr saeInit, "InitInstall", ""
  1561. %endrem ''DEBUG
  1562.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = FALSE THEN
  1563. %rem
  1564.     StfApiErr saeFail, "InitInstall", ""
  1565. %endrem ''DEBUG
  1566.     END
  1567.     END IF
  1568. END SUB
  1569. '*************************************************************************
  1570.  
  1571. PUBLIC SUB CreateDir (szDir$, cmo%) 
  1572. '** Purpose:
  1573. '** Author:
  1574. '** Arguments: szDir$, cmo%
  1575. '*************************************************************************
  1576. DIM logfile$
  1577. %rem
  1578.     if FValidFATDir(szDir$) = FALSE then
  1579.     BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  1580.     end if
  1581. %endrem ''DEBUG
  1582.      IF Lot_CreateDirectory(szDir$) <> NO_ERROR THEN
  1583.     ErrorMsg SID_ERR_CREATEDIR, szDir$ & " " & CStr(cmo%) & CHR(10) &_
  1584.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1585.     ERROR STFQUIT
  1586.     END IF
  1587.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1588.     If logfile$ <> "" THEN 
  1589.         OpenLogFile logfile$,1 
  1590.         WriteToLogFile  "** Successfully created " + szDir$+ " ;with cmo% = " + CStr(cmo%)
  1591.         CloseLogFile
  1592.     END IF
  1593.  
  1594. END SUB
  1595. '*************************************************************************
  1596.  
  1597. PUBLIC SUB RemoveIniSection (szFile$, szSect$, cmo%) 
  1598. '** Purpose:
  1599. '** Author:
  1600. '** Arguments: szFile$, szSect$, cmo%
  1601. '*************************************************************************
  1602. DIM logfile$
  1603. %rem
  1604.     if FValidIniFile(szFile$) = FALSE then
  1605.     n% = 1
  1606.     elseif FValidInfSect(szSect$) = FALSE then
  1607.     n% = 2
  1608.     else
  1609.     n% = 0
  1610.     end if
  1611.     if n% > 0 then
  1612.     BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  1613.     end if
  1614. %endrem ''DEBUG
  1615.  
  1616.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1617.     IF FRemoveIniSection(szFile$, szSect$, CLng(cmo%)) = FALSE THEN
  1618.     ErrorMsg SID_ERR_REMOVEINISECTION, "** Failed removing ini entry from " & szFile$ & CHR(10) &_
  1619.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1620.     ERROR STFERR
  1621.     END IF
  1622.     If logfile$ <> "" THEN 
  1623.     OpenLogFile logfile$,1 
  1624.     WriteToLogFile  "** Successfully removed from " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1625.     WriteToLogFile  "[" + szSect$ +"]"
  1626.     CloseLogFile
  1627.     END IF
  1628.  
  1629. END SUB
  1630. '*************************************************************************
  1631.  
  1632. PUBLIC SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) 
  1633. '** Purpose:
  1634. '** Author:
  1635. '** Arguments: szFile$, szSect$, szKey$, szValue$, cmo%
  1636. '*************************************************************************
  1637. DIM logfile$
  1638. %rem
  1639.     if FValidIniFile(szFile$) = FALSE then
  1640.     n% = 1
  1641.     elseif FValidInfSect(szSect$) = FALSE then
  1642.     n% = 2
  1643.     else
  1644.     n% = 0
  1645.     end if
  1646.     if n% > 0 then
  1647.     BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1648.     end if
  1649. %endrem ''DEBUG
  1650.  
  1651.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1652.  
  1653.     IF Lot_CreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, CLng(cmo%)) = FALSE THEN
  1654.  
  1655. '    IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, CLng(cmo%)) = FALSE THEN
  1656.     ErrorMsg SID_ERR_CREATEINIKEYVALUE, "** Failed writing to " & szFile$ & CHR(10) & _
  1657.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1658.     ERROR STFQUIT
  1659.     END IF
  1660.     If logfile$ <> "" THEN 
  1661.     OpenLogFile logfile$,1 
  1662.     WriteToLogFile  "** Successfully wrote to " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1663.     WriteToLogFile  "[" + szSect$ +"]"
  1664.     WriteToLogFile  szKey$ +"="+ szValue$
  1665.     CloseLogFile
  1666.     END IF
  1667. END SUB
  1668. '*************************************************************************
  1669.  
  1670. PUBLIC SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) 
  1671. '** Purpose:
  1672. '** Author:
  1673. '** Arguments: szFile$, szSect$, szKey$, cmo%
  1674. '*************************************************************************
  1675. DIM logfile$
  1676. %rem
  1677.     if FValidIniFile(szFile$) = FALSE then
  1678.     n% = 1
  1679.     elseif FValidInfSect(szSect$) = FALSE then
  1680.     n% = 2
  1681.     elseif szKey$ = "" then
  1682.     n% = 3
  1683.     else
  1684.     n% = 0
  1685.     end if
  1686.     if n% > 0 then
  1687.     BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1688.     end if
  1689. %endrem ''DEBUG
  1690.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1691.  
  1692.     IF FRemoveIniKey(szFile$, szSect$, szKey$, CLng(cmo%)) = FALSE THEN
  1693.     ErrorMsg SID_ERR_REMOVEINIKEY, "** Failed removing ini entry from " & szFile$ & CHR(10) &_
  1694.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1695.     ERROR STFERR
  1696.     END IF
  1697.     If logfile$ <> "" THEN 
  1698.     OpenLogFile logfile$,1 
  1699.     WriteToLogFile "** Successfully Removed from " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1700.     WriteToLogFile "[" + szSect$ +"]"
  1701.     WriteToLogFile szKey$ +"="
  1702.     CloseLogFile
  1703.     END IF
  1704.  
  1705. END SUB
  1706. '*************************************************************************
  1707.  
  1708. PUBLIC SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) 
  1709. '** Purpose:
  1710. '** Author:
  1711. '** Arguments: szFile$, szSect$, szKey$, szValue$, cmo%
  1712. '*************************************************************************
  1713. DIM logfile$
  1714. %rem
  1715.     if FValidFATPath(szFile$) = FALSE then
  1716.     n% = 1
  1717.     elseif FValidInfSect(szSect$) = FALSE then
  1718.     n% = 2
  1719.     elseif szKey$ = "" then
  1720.     n% = 3
  1721.     else
  1722.     n% = 0
  1723.     end if
  1724.     if n% > 0 then
  1725.     BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1726.     end if
  1727. %endrem ''DEBUG
  1728.  
  1729.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  1730.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, CLng(cmo%)) = FALSE THEN
  1731.     ErrorMsg SID_ERR_CREATESYSINIKEYVALUE,  "** Failed writing to " & szFile$ & CHR(10) & _ 
  1732.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1733.     ERROR STFQUIT
  1734.     END IF
  1735.     If logfile$ <> "" THEN 
  1736.     OpenLogFile logfile$,1 
  1737.     WriteToLogFile "** Successfully did a CreateSysIniKeyValue to " + szFile$+ " ;with cmo% = " + CStr(cmo%)
  1738.     WriteToLogFile "[" + szSect$ +"]"
  1739.     WriteToLogFile szKey$ +"="+ szValue$
  1740.     CloseLogFile
  1741.     END IF
  1742.  
  1743.  
  1744. END SUB
  1745. '*************************************************************************
  1746.  
  1747. PUBLIC SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) 
  1748. '** Purpose:
  1749. '** Author:
  1750. '** Arguments: szGroup$, szPath$, cmo%
  1751. '*************************************************************************
  1752. %rem
  1753.     if szGroup$ = "" or len(szGroup$) > 24 then
  1754.     BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1755.     end if
  1756. %endrem ''DEBUG
  1757.     IF FCreateProgManGroup(szGroup$, szPath$, CLng(cmo%)) = FALSE THEN
  1758.     ErrorMsg SID_ERR_CREATEPROGMANGROUP, szGroup$ & CHR(10) & _
  1759.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1760.     END IF
  1761. END SUB
  1762. '*************************************************************************
  1763.  
  1764. PUBLIC SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) 
  1765. '** Purpose:
  1766. '** Author:
  1767. '** Arguments: szGroup$, Cmd%, cmo%
  1768. '*************************************************************************
  1769. %rem
  1770.     if szGroup$ = "" or len(szGroup$) > 24 then
  1771.     BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1772.     end if
  1773. %endrem ''DEBUG
  1774.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), CLng(cmo%)) = FALSE THEN
  1775.     ErrorMsg SID_ERR_SHOWPROGMANGROUP, ""
  1776.     END IF
  1777. END SUB
  1778. '*************************************************************************
  1779.  
  1780. PUBLIC SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) 
  1781. '** Purpose:
  1782. '** Author:
  1783. '** Arguments: szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%
  1784. '*************************************************************************
  1785. %rem
  1786.     if FValidInfSect(szSect$) = FALSE then
  1787.     n% = 1
  1788.     elseif szKey$ = "" then
  1789.     n% = 2
  1790.     elseif FValidFATDir(szDst$) = FALSE then
  1791.     n% = 3
  1792.     else
  1793.     n% = 0
  1794.     end if
  1795.     if n% > 0 then
  1796.     BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1797.     end if
  1798. %endrem ''DEBUG
  1799.  
  1800.     IF FStampResource (szSect$, szKey$, szDst$, CLng(wResType%), CLng(wResId%), szData$, CLng(cbData%)) = FALSE THEN
  1801.     ErrorMsg SID_ERR_STAMPRESOURCE, ""
  1802.     ERROR STFQUIT
  1803.     END IF
  1804. END SUB
  1805. '*************************************************************************
  1806.  
  1807.  
  1808. PUBLIC SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) 
  1809. '** Purpose:
  1810. '** Author:
  1811. '** Arguments: szGroup$, szItem$, szCmd$, szOther$, cmo%
  1812. '*************************************************************************
  1813.     DIM szItemNew$
  1814.  
  1815.     szItemNew$ = szItem$
  1816.     IF szOther$ <> "" THEN
  1817.     szItemNew$ = szItem$ + "," + szOther$
  1818.     END IF
  1819. %rem
  1820.     if szGroup$ = "" or len(szGroup$) > 24 then
  1821.     BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1822.     end if
  1823. %endrem ''DEBUG
  1824.  
  1825.     IF FCreateProgManItem(CHR$(34)+szGroup$+CHR$(34), szItemNew$, szCmd$, CLng(cmo%)) = FALSE THEN
  1826.     ErrorMsg SID_ERR_CREATEPROGMANITEM, szItemNew$ & CHR(10) & _
  1827.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1828.     END IF
  1829.     szItemNew$ = ""
  1830. END SUB
  1831. '*************************************************************************
  1832.  
  1833. PUBLIC SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) 
  1834. '** Purpose:
  1835. '** Author:
  1836. '** Arguments:
  1837. '** Returns:
  1838. '**     
  1839. '*************************************************************************
  1840. %rem
  1841.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1842.     n% = 1
  1843.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1844.     n% = 1
  1845.     elseif szProgHelp$ = "" then
  1846.     n% = 2
  1847.     else
  1848.     n% = 0
  1849.     end if
  1850.     if n% > 0 then
  1851.     BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1852.     end if
  1853. %endrem ''DEBUG
  1854.     IF FAddDos5Help (szProgName$, szProgHelp$, CLng(cmo%)) = FALSE THEN
  1855.     ErrorMsg SID_ERR_ADDDOS5HELP, ""
  1856.     ERROR STFQUIT
  1857.     END IF
  1858. END SUB
  1859. '*************************************************************************
  1860.  
  1861.  
  1862. PUBLIC SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) 
  1863. '** Purpose:
  1864. '** Author:
  1865. '** Arguments:
  1866. '** Returns:
  1867. '**     
  1868. '*************************************************************************
  1869.     dim rc%
  1870. %rem
  1871.     if FValidFATPath(szFullPathSrc$) = FALSE then
  1872.     n% = 1
  1873.     elseif FValidFATPath(szFullPathDst$) = FALSE then
  1874.     n% = 2
  1875.     else
  1876.     n% = 0
  1877.     end if
  1878.     if n% > 0 then
  1879.     BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1880.     end if
  1881. %endrem ''DEBUG
  1882.  
  1883.     rc% = Win32CopyFile(szFullPathSrc$, szFullPathDst$, 0)  
  1884.     IF rc%  = FALSE THEN
  1885.         ErrorMsg SID_ERR_COPYFILE, szFullPathSrc$ & LdString(SID_TO) & szFullPathDst$ & CHR(10) & _
  1886.          LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & LSI_INFO(11) 
  1887.         ERROR STFQUIT
  1888.     END IF
  1889. END SUB
  1890. '*************************************************************************
  1891.  
  1892. PUBLIC SUB RemoveFile (szFullPathSrc$, cmo%) 
  1893. '** Purpose:
  1894. '** Author:
  1895. '** Arguments:
  1896. '** Returns:
  1897. '**     
  1898. '*************************************************************************
  1899. %rem
  1900.     if FValidFATPath(szFullPathSrc$) = FALSE then
  1901.     BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1902.     end if
  1903. %endrem ''DEBUG
  1904.      
  1905. '   IF  YnrcRemoveFile(szFullPathSrc$, CLng(cmo%)) = ynrcNo THEN
  1906.     IF  Lot_DeleteFile(szFullPathSrc$, cmo%) = FALSE THEN
  1907.         'ErrorMsg SID_ERR_REMOVEFILE, szFullPathSrc$
  1908.     END IF
  1909. END SUB
  1910. '*************************************************************************
  1911.  
  1912. PUBLIC SUB BackupFile (szFullPath$, szBackup$) 
  1913. '** Purpose:
  1914. '** Author:
  1915. '** Arguments:
  1916. '** Returns:
  1917. '**     
  1918. '*************************************************************************
  1919. %rem
  1920.     if FValidFATPath(szFullPath$) = FALSE then
  1921.     n% = 1
  1922.     elseif szBackup$ = "" then
  1923.     n% = 2
  1924.     else
  1925.     n% = 0
  1926.     end if
  1927.     if n% > 0 then
  1928.     BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1929.     end if
  1930. %endrem ''DEBUG
  1931.  
  1932.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1933.     ErrorMsg SID_ERR_BACKUPFILE, szFullPath$ + LdString(SID_TO) + szBackup$
  1934.     ERROR STFQUIT
  1935.     END IF
  1936. END SUB
  1937. '*************************************************************************
  1938.  
  1939. PUBLIC SUB RenameFile (szFullPath$, szBackup$) 
  1940. '** Purpose:
  1941. '** Author:
  1942. '** Arguments:
  1943. '** Returns:
  1944. '**     
  1945. '*************************************************************************
  1946. %rem
  1947.     if FValidFATPath(szFullPath$) = FALSE then
  1948.     n% = 1
  1949.     elseif szBackup$ = "" then
  1950.     n% = 2
  1951.     else
  1952.     n% = 0
  1953.     end if
  1954.     if n% > 0 then
  1955.     BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1956.     end if
  1957. %endrem ''DEBUG
  1958.  
  1959.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1960.     ErrorMsg SID_ERR_RENAMEFILE, szFullPath$ + LdString(SID_TO) + szBackup$
  1961.     ERROR STFQUIT
  1962.     END IF
  1963. END SUB
  1964. '*************************************************************************
  1965.  
  1966.  
  1967. %rem
  1968.  
  1969. PUBLIC SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) 
  1970. '** Purpose:
  1971. '** Author:
  1972. '** Arguments:
  1973. '** Returns:
  1974. '**     
  1975. '*************************************************************************
  1976.     if FValidInfSect(szSect$) = FALSE then
  1977.     n% = 1
  1978.     elseif szKey$ = "" then
  1979.     n% = 2
  1980.     elseif FValidFATDir(szSrc$) = FALSE then
  1981.     n% = 3
  1982.     elseif FValidFATPath(szDest$) = FALSE then
  1983.     n% = 4
  1984.     else
  1985.     n% = 0
  1986.     end if
  1987.     if n% > 0 then
  1988.     BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1989.     end if
  1990.  
  1991.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = FALSE THEN
  1992.     ErrorMsg SID_ERR_ADDSPECIALFILETOCOPYLIST, szSect$ + " , " + szKey$
  1993.     ERROR STFQUIT
  1994.     END IF
  1995. END SUB
  1996.  
  1997. %endrem
  1998.  
  1999. PUBLIC SUB OpenLogFile (szFile$, fAppend%) 
  2000. '** Purpose:
  2001. '** Author:
  2002. '** Arguments:
  2003. '** Returns:
  2004. '**     
  2005. '*************************************************************************
  2006. %rem
  2007.     if FValidFATPath(szFile$) = FALSE then
  2008.     BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  2009.     end if
  2010. %endrem ''DEBUG
  2011.     IF FOpenLogFile(szFile$, CLng(fAppend%)) = FALSE THEN
  2012.     ErrorMsg SID_ERR_OPENLOGFILE, szFile$
  2013.     END IF
  2014. END SUB
  2015. '*************************************************************************
  2016.  
  2017. PUBLIC SUB CloseLogFile 
  2018. '** Purpose:
  2019. '** Author:
  2020. '** Arguments:
  2021. '** Returns:
  2022. '**     
  2023. '*************************************************************************
  2024.     IF FCloseLogFile() = FALSE THEN
  2025.     ErrorMsg SID_ERR_CLOSELOGFILE, ""
  2026.     ERROR STFQUIT
  2027.     END IF
  2028. END SUB
  2029. '*************************************************************************
  2030.  
  2031. PUBLIC SUB WriteToLogFile (szStr$) 
  2032. '** Purpose:
  2033. '** Author:
  2034. '** Arguments:
  2035. '** Returns:
  2036. '**     
  2037. '*************************************************************************
  2038.     IF FWriteToLogFile(szStr$, 1) = FALSE THEN
  2039.     ErrorMsg SID_ERR_WRITETOLOGFILE, szStr$
  2040.     ERROR STFQUIT
  2041.     END IF
  2042. END SUB
  2043. '*************************************************************************
  2044.  
  2045. PUBLIC FUNCTION FindFileUsingFileOpen (szFile$)  AS STRING
  2046. '** Purpose:
  2047. '** Author:
  2048. '** Arguments:
  2049. '** Returns:
  2050. '**     
  2051. '*************************************************************************
  2052.       DIM szBuf$, wRet&
  2053.  
  2054.     szBuf$ = STRING$(512, 32)
  2055.  
  2056.     wRet& = WFindFileUsingFileOpen(szFile$, szBuf$, CLng(len(szBuf$)))
  2057.     IF wRet& = 0 THEN
  2058.     FindFileUsingFileOpen = NullTrim(szBuf$)
  2059.     ELSEIF wRet& = 1 THEN
  2060.     FindFileUsingFileOpen = ""
  2061.     ELSE
  2062.     ErrorMsg SID_ERR_FINDFILEUSINGFILEOPEN, szFile$
  2063.     ERROR STFQUIT
  2064.     END IF
  2065.  
  2066.     szBuf$ = ""
  2067. END FUNCTION
  2068. '*************************************************************************
  2069.  
  2070. PUBLIC FUNCTION IsLongDirPath (szDir$)  AS INTEGER
  2071. '** Purpose:
  2072. '** Author:
  2073. '** Arguments:
  2074. '** Returns:
  2075. '**     
  2076. '*************************************************************************
  2077.     DIM ret&
  2078.  
  2079.     IsLongDirPath = TRUE
  2080.     IF szDir$ <> "" THEN
  2081.       IF GetSymbolValue(szDir$) <> "" THEN
  2082.         RemoveSymbol szDir$
  2083.       END IF
  2084.       SetSymbolValue SYM_NOLONGDIR$, "TRUE"
  2085.       ret&=FCleanFatPath(szDir$)
  2086.       IF ret& <> FALSE THEN
  2087.         IsLongDirPath = FALSE
  2088.       ELSE
  2089.         IsLongDirPath = TRUE
  2090.       END IF
  2091.       RemoveSymbol SYM_NOLONGDIR$
  2092.     END IF
  2093. END FUNCTION
  2094.  
  2095. PUBLIC FUNCTION IsDirWritable (szDir$)  AS INTEGER
  2096. '** Purpose:
  2097. '** Author:
  2098. '** Arguments:
  2099. '** Returns:
  2100. '**     
  2101. '*************************************************************************
  2102. '    DIM szShort$ ,ret&
  2103.  
  2104. '    ret& = GetShortPathName( szDir$, szShort$)
  2105. '    IsDirWritable = CInt(Lot_IsDirWritable(szShort$))
  2106.     IsDirWritable = CInt(Lot_IsDirWritable(szDir$))
  2107. END FUNCTION
  2108. '*************************************************************************
  2109.  
  2110. PUBLIC FUNCTION IsFileWritable (szFile$)  AS INTEGER
  2111. '** Purpose:
  2112. '** Author:
  2113. '** Arguments:
  2114. '** Returns:
  2115. '**     
  2116. '*************************************************************************
  2117. %rem
  2118.     if FValidFATDir(szFile$) = FALSE then
  2119.     BadArgErr 1, "IsFileWritable", szFile$
  2120.     end if
  2121. %endrem ''DEBUG
  2122.     IsFileWritable = CInt(FIsFileWritable(szFile$))
  2123. END FUNCTION
  2124. '*************************************************************************
  2125.  
  2126. PUBLIC FUNCTION GetWindowsMajorVersion  AS INTEGER
  2127. '** Purpose:
  2128. '** Author:
  2129. '** Arguments:
  2130. '** Returns:
  2131. '**     
  2132. '*************************************************************************
  2133.     GetWindowsMajorVersion = CInt(GetVersion()) MOD 256
  2134. END FUNCTION
  2135. '*************************************************************************
  2136.  
  2137. PUBLIC FUNCTION GetWindowsMinorVersion  AS INTEGER
  2138. '** Purpose:
  2139. '** Author:
  2140. '** Arguments:
  2141. '** Returns:
  2142. '**     
  2143. '*************************************************************************
  2144.     GetWindowsMinorVersion = CInt(GetVersion()) / 256
  2145. END FUNCTION
  2146. '*************************************************************************
  2147.  
  2148. PUBLIC FUNCTION IsNewShell AS INTEGER
  2149. '** Purpose:    Determine if new Windows 95 shell in use (SUR)
  2150. '** Author:        JMD
  2151. '** Returns:    TRUE if new Windows 95 shell in use (SUR)
  2152. '**     
  2153. '*************************************************************************
  2154. '   IsNewShell = (GetVersion() < 0)
  2155.     IsNewShell = (Lot_IsNewShell = 1)
  2156. END FUNCTION
  2157. '*************************************************************************
  2158.  
  2159. PUBLIC FUNCTION GetWindowsMode  AS INTEGER
  2160. '** Purpose:
  2161. '** Author:
  2162. '** Arguments:
  2163. '** Returns:
  2164. '**     
  2165. '*************************************************************************
  2166.      GetWindowsMode = 2
  2167. END FUNCTION
  2168. '*************************************************************************
  2169.  
  2170. PUBLIC FUNCTION GetWindowsDir  AS STRING
  2171. '** Purpose:
  2172. '** Author:
  2173. '** Arguments:
  2174. '** Returns:
  2175. '**     
  2176. '*************************************************************************
  2177.    DIM szBufAl$, cbBuf&, szBuf$, rv&
  2178.  
  2179.    szBufAl$ = CreateBuffer(256)  
  2180.    cbBuf&   = GetWindowsDirectory(szBufAl$, 256) 
  2181.  
  2182.    IF cbBuf& = 0 THEN
  2183.       GetWindowsDir = ""
  2184.       ErrorMsg SID_ERR_GETWINDOWSDIR, ""
  2185.       ERROR STFQUIT
  2186.    ELSE
  2187.        IF cbBuf& > 255 THEN
  2188.      ErrorMsg SID_ERR_GETWINDOWSDIR2, ""
  2189.      ERROR STFQUIT
  2190.         END IF
  2191.         szBuf$ = NullTrim(szBufAl$)
  2192.       IF MID$(szBuf$, 1, 1) = "\" THEN
  2193.      szBuf$ = MID$(GetWindowsSysDir(), 1, 2) + szBuf$
  2194.       ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  2195.      szBuf$ = MID$(GetWindowsSysDir(), 1, 3) + szBuf$
  2196.       END IF
  2197.       rv& = Lot_CleanPath(szBuf$)
  2198.       IF rv& = FALSE THEN
  2199.      ErrorMsg SID_ERR_GETWINDOWSDIR2, ""
  2200.      ERROR STFQUIT
  2201.       END IF
  2202.         GetWindowsDir = szBuf$ 
  2203.    END IF
  2204.  
  2205. END FUNCTION
  2206. '*************************************************************************
  2207.  
  2208. PUBLIC FUNCTION GetWindowsSysDir()  AS STRING
  2209. '** Purpose:
  2210. '** Author:
  2211. '** Arguments:
  2212. '** Returns:
  2213. '**     
  2214. '*************************************************************************
  2215.    DIM szBufAl$, cbBuf&, szBuf$, rv&
  2216.  
  2217.    szBufAl$ = CreateBuffer(256)
  2218.    cbBuf&   = GetSystemDirectory(szBufAl$, 256)
  2219.  
  2220.    IF cbBuf& = 0 THEN
  2221.       ErrorMsg SID_ERR_GETWINDOWSSYSDIR, ""
  2222.       ERROR STFQUIT
  2223.    ELSE
  2224.       IF cbBuf& > 255 THEN
  2225.      ErrorMsg SID_ERR_GETWINDOWSSYSDIR2, ""
  2226.      ERROR STFQUIT
  2227.       END IF
  2228.         szBuf$ = NullTrim(szBufAl$)
  2229.       IF MID$(szBuf$, 1, 1) = "\" THEN
  2230.      szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  2231.       ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  2232.      szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  2233.       END IF
  2234.       rv& = Lot_CleanPath(szBuf$)
  2235.       IF rv& = FALSE THEN
  2236.      ErrorMsg SID_ERR_GETWINDOWSSYSDIR2, ""
  2237.      ERROR STFQUIT
  2238.       END IF
  2239.       GetWindowsSysDir = szBuf$
  2240.     END IF
  2241.  
  2242. END FUNCTION
  2243. '*************************************************************************
  2244.  
  2245. PUBLIC FUNCTION IsWindowsShared  AS INTEGER
  2246. '** Purpose:
  2247. '** Author:
  2248. '** Arguments:
  2249. '** Returns:
  2250. '**     
  2251. '*************************************************************************
  2252.    DIM szWin$, szSys$
  2253.  
  2254.    szWin$ = GetWindowsDir()
  2255.    szSys$ = GetWindowsSysDir()
  2256.  
  2257.    IF LEN(szWin$) = 0 THEN
  2258.       ErrorMsg SID_ERR_ISWINDOWSSHARED, ""
  2259.       ERROR STFQUIT
  2260.    END IF
  2261.  
  2262.    IF LEN(szSys$) <= LEN(szWin$) THEN
  2263.       IsWindowsShared = TRUE
  2264.    ELSE
  2265.       szSys$ = MID$(szSys$, 1, LEN(szWin$))
  2266.       IF szWin$ = szSys$ THEN
  2267.      IsWindowsShared = FALSE
  2268.       ELSE
  2269.      IsWindowsShared = TRUE
  2270.       END IF
  2271.    END IF
  2272.  
  2273. END FUNCTION
  2274. '*************************************************************************
  2275.  
  2276. PUBLIC FUNCTION GetScreenWidth  AS INTEGER
  2277. '** Purpose:
  2278. '** Author:
  2279. '** Arguments:
  2280. '** Returns:
  2281. '**     
  2282. '*************************************************************************
  2283.     GetScreenWidth = CInt(GetSystemMetrics(SM_CXSCREEN))
  2284. END FUNCTION
  2285. '*************************************************************************
  2286.  
  2287. PUBLIC FUNCTION GetScreenHeight  AS INTEGER
  2288. '** Purpose:
  2289. '** Author:
  2290. '** Arguments:
  2291. '** Returns:
  2292. '**     
  2293. '*************************************************************************
  2294.     GetScreenHeight = CInt(GetSystemMetrics(SM_CYSCREEN))
  2295. END FUNCTION
  2296. '*************************************************************************
  2297.  
  2298. PUBLIC SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) 
  2299. '** Purpose:
  2300. '** Author:
  2301. '** Arguments:
  2302. '** Returns:
  2303. '**     
  2304. '*************************************************************************
  2305.  
  2306. %rem
  2307.     if (FValidFATPath(szSrc$) = FALSE) AND (szSrc$ <> "") then
  2308.     n% = 1
  2309.     elseif FValidFATPath(szDst$) = FALSE then
  2310.     n% = 2
  2311.     elseif FValidFATDir(szDir$) = FALSE then
  2312.     n% = 3
  2313.     else
  2314.     n% = 0
  2315.     end if
  2316.     if n% > 0 then
  2317.     BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  2318.     end if
  2319. %endrem ''DEBUG
  2320.  
  2321.     IF FPrependToPath (szSrc$, szDst$, szDir$, CLng(cmo%)) = FALSE THEN
  2322.     ErrorMsg SID_ERR_PREPENDTOPATH, _
  2323.          szSrc$ & " : " & szDst$ & " : " & szDir$
  2324.     ERROR STFQUIT
  2325.     END IF
  2326. END SUB
  2327.  
  2328. '**************************************************************************
  2329. '***************************  Error Handlers  *****************************
  2330. '**************************************************************************
  2331.  
  2332. %rem --------------------------------------------------------
  2333.  
  2334. '**************************************************************************
  2335. PUBLIC SUB StfApiErr (nMsg%, szApi$, szArgs$)       ''DEBUG only
  2336. '** Purpose:
  2337. '** Author:
  2338. '** Arguments:
  2339. '** Returns:
  2340. '**     
  2341. '*************************************************************************
  2342.     select case nMsg%
  2343.     case saeFail
  2344.         lpText$ = "Failed"
  2345.     case saeInit
  2346.         lpText$ = "Already Initialized"
  2347.     case saeNYI
  2348.         lpText$ = "NYI"
  2349.     case else
  2350.         lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  2351.     end select
  2352.  
  2353.     lpText$ = lpText$ + ": "+ szApi$
  2354.     if szArgs$ <> "" then
  2355.     lpText$ = lpText + " (" + szArgs$ + ")"
  2356.     end if
  2357.     lpCaption$ = "MS-Setup Toolkit API Error"
  2358.     res& = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  2359.     print lpText$
  2360.     lpText$ = ""
  2361.     lpCaption$ = ""
  2362. END SUB
  2363. '**************************************************************************
  2364.  
  2365. PUBLIC SUB BadArgErr (nArg%, szApi$, szArgs$)       ''DEBUG only
  2366. '** Purpose:
  2367. '** Author:
  2368. '** Arguments:
  2369. '** Returns:
  2370. '**     
  2371. '*************************************************************************
  2372.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  2373.     ERROR STFQUIT
  2374. END SUB
  2375. '**************************************************************************
  2376.  
  2377. '** REVIEW: Move this function into common lib (we'll need it there too)
  2378. '**************************************************************************
  2379.  
  2380. PUBLIC FUNCTION FValidInfSect (szSect$)  AS INTEGER
  2381. '** Purpose:
  2382. '** Author:
  2383. '** Arguments:
  2384. '** Returns:
  2385. '**     
  2386. '*************************************************************************
  2387.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  2388.     FValidInfSect = FALSE
  2389.     else
  2390.     FValidInfSect = TRUE
  2391.     end if
  2392. END FUNCTION
  2393. '**************************************************************************
  2394.  
  2395. '** REVIEW: Move this function into common lib (we'll need it there too)
  2396. '**************************************************************************
  2397.  
  2398. PUBLIC FUNCTION FValidIniFile (szFile$)  AS INTEGER
  2399. '** Purpose:
  2400. '** Author:
  2401. '** Arguments:
  2402. '** Returns:
  2403. '**     
  2404. '*************************************************************************
  2405.     if (FValidFATPath(szFile$) = FALSE) AND (UCASE$(szFile$) <> gWININI$) then
  2406.     FValidIniFile = FALSE
  2407.     else
  2408.     FValidIniFile = TRUE
  2409.     end if
  2410. END FUNCTION
  2411. '**************************************************************************
  2412.  
  2413. PUBLIC FUNCTION FValidDrive (szDrive$)  AS INTEGER
  2414. '** Purpose:
  2415. '** Author:
  2416. '** Arguments:
  2417. '** Returns:
  2418. '**     
  2419. '*************************************************************************
  2420.  
  2421.     if szDrive$ = "" then
  2422.     FValidDrive = FALSE
  2423.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  2424.     FValidDrive = TRUE
  2425.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  2426.     FValidDrive = FALSE
  2427.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  2428.     FValidDrive = FALSE
  2429.     elseif LEN(szDrive$) = 1 then
  2430.     FValidDrive = TRUE
  2431.     elseif INSTR(2,szDrive$,":\") = 2 then
  2432.     FValidDrive = TRUE
  2433.     elseif INSTR(1,szDrive$,":") = 2 then
  2434.     FValidDrive = TRUE
  2435.     else
  2436.     FValidDrive = FALSE
  2437.     end if
  2438. END FUNCTION
  2439. '**************************************************************************
  2440.  
  2441. %endrem --------------------------------------------------------------
  2442.  
  2443. PUBLIC SUB SetRegKeyValue(szKey$, szValue$) 
  2444. '** Purpose:
  2445. '** Author:
  2446. '** Arguments:
  2447. '** Returns:
  2448. '**     
  2449. '*************************************************************************
  2450.     DIM i%, logfile$
  2451.  
  2452.     logfile$ = GetSymbolValue(SYM_LOGFILE$)
  2453.  
  2454.     IF RegSetValue(HKEY_CLASSES_ROOT, szKey$, REG_SZ,  szValue$, CLng(len(szKey$))) > ERROR_SUCCESS THEN
  2455.     i% = EercErrorHandler(GRC_API_FAILED, 1, "SetRegKeyValue", "", "")
  2456.     ErrorMsg SID_ERR_SETREGKEYVALUE, szKey$ + LdString(SID_TO) + szValue$
  2457.     '' Shouldn't be fatal ERROR STFQUIT
  2458.     END IF
  2459.  
  2460.     If logfile$ <> "" THEN 
  2461.     OpenLogFile logfile$,1 
  2462.     WriteToLogFile "** Successfully SetRegKeyValue " + szKey$+ ", "+ szValue$
  2463.     CloseLogFile
  2464.     END IF
  2465.  
  2466. END SUB
  2467. '**************************************************************************
  2468.  
  2469. '*************************************************************************
  2470.  
  2471. PUBLIC FUNCTION IsDriveValid (szDrive$)  AS INTEGER
  2472. '** Purpose:
  2473. '** Author:
  2474. '** Arguments:
  2475. '** Returns:
  2476. '**     
  2477. '*************************************************************************
  2478. %rem 'DEBUG
  2479.     if FValidDrive(szDrive$) = FALSE then
  2480.     BadArgErr 1, "IsDriveValid", szDrive$
  2481.     end if
  2482. %endrem ' ''DEBUG
  2483.     IsDriveValid = CInt(FIsValidDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2484. END FUNCTION
  2485. '*************************************************************************
  2486.  
  2487. PUBLIC FUNCTION IsDriveLocalHard (szDrive$)  AS INTEGER
  2488. '** Purpose:
  2489. '** Author:
  2490. '** Arguments:
  2491. '** Returns:
  2492. '**     
  2493. '*************************************************************************
  2494. %rem 'DEBUG
  2495.     if FValidDrive(szDrive$) = FALSE then
  2496.     BadArgErr 1, "IsDriveLocalHard", szDrive$
  2497.     end if
  2498. %endrem ' ''DEBUG
  2499.     IsDriveLocalHard = CInt(FIsLocalHardDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2500. END FUNCTION
  2501. '*************************************************************************
  2502.  
  2503. PUBLIC FUNCTION IsDriveRemovable (szDrive$)  AS INTEGER
  2504. '** Purpose:
  2505. '** Author:
  2506. '** Arguments:
  2507. '** Returns:
  2508. '**     
  2509. '*************************************************************************
  2510. %rem 'DEBUG
  2511.     if FValidDrive(szDrive$) = FALSE then
  2512.     BadArgErr 1, "IsDriveRemovable", szDrive$
  2513.     end if
  2514. %endrem ' ''DEBUG
  2515.     IsDriveRemovable = CInt(FIsRemoveDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2516. END FUNCTION
  2517. '*************************************************************************
  2518.  
  2519. PUBLIC FUNCTION IsDriveNetwork (szDrive$)  AS INTEGER
  2520. '** Purpose:
  2521. '** Author:
  2522. '** Arguments:
  2523. '** Returns:
  2524. '**     
  2525. '*************************************************************************
  2526. %rem 'DEBUG
  2527.     if FValidDrive(szDrive$) = FALSE then
  2528.     BadArgErr 1, "IsDriveNetwork", szDrive$
  2529.     end if
  2530. %endrem ' ''DEBUG
  2531.     IsDriveNetwork = CInt(FIsRemoteDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1))
  2532. END FUNCTION
  2533. '*************************************************************************
  2534.  
  2535. PUBLIC FUNCTION GetTotalSpaceForDrive (szDrive$)  AS LONG
  2536. '** Purpose:
  2537. '** Author:
  2538. '** Arguments:
  2539. '** Returns:
  2540. '**     
  2541. '*************************************************************************
  2542. %rem 'DEBUG
  2543.     if FValidDrive(szDrive$) = FALSE then
  2544.     BadArgErr 1, "GetTotalSpaceForDrive", szDrive$
  2545.     end if
  2546. %endrem ' ''DEBUG
  2547.     GetTotalSpaceForDrive = LcbTotalDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  2548. END FUNCTION
  2549. '*************************************************************************
  2550.  
  2551. PUBLIC FUNCTION GetFreeSpaceForDrive (szDrive$)  AS LONG
  2552. '** Purpose:
  2553. '** Author:
  2554. '** Arguments:
  2555. '** Returns:
  2556. '**     
  2557. '*************************************************************************
  2558. %rem 'DEBUG
  2559.     if FValidDrive(szDrive$) = FALSE then
  2560.     BadArgErr 1, "GetFreeSpaceForDrive", szDrive$
  2561.     end if
  2562. %endrem ' ''DEBUG
  2563.     GetFreeSpaceForDrive = Lot_FreeDrive(szDrive$)
  2564. '    GetFreeSpaceForDrive = LcbFreeDrive(ASC(UCASE$(szDrive$)) - ASC("A") + 1)
  2565. END FUNCTION
  2566. '*************************************************************************
  2567.  
  2568. PUBLIC SUB GetValidDrivesList (szSymbol$) 
  2569. '** Purpose:
  2570. '** Author:
  2571. '** Arguments:
  2572. '** Returns:
  2573. '**     
  2574. '*************************************************************************
  2575. %rem 'DEBUG
  2576.     if szSymbol$ = "" then
  2577.     BadArgErr 1, "GetValidDrivesList", szSymbol$
  2578.     end if
  2579. %endrem ' ''DEBUG
  2580.     if FGetValidDrivesList(szSymbol$) = FALSE then
  2581.     ErrorMsg SID_ERR_GETVALIDDRIVESLIST, ""
  2582.     ERROR STFQUIT
  2583.     end if
  2584. END SUB
  2585. '*************************************************************************
  2586.  
  2587. PUBLIC SUB GetLocalHardDrivesList (szSymbol$) 
  2588. '** Purpose:
  2589. '** Author:
  2590. '** Arguments:
  2591. '** Returns:
  2592. '**     
  2593. '*************************************************************************
  2594. %rem 'DEBUG
  2595.     if szSymbol$ = "" then
  2596.     BadArgErr 1, "GetLocalHardDrivesList", szSymbol$
  2597.     end if
  2598. %endrem ' ''DEBUG
  2599.     if FGetLocalHardDrivesList(szSymbol$) = FALSE then
  2600.     ErrorMsg SID_ERR_GETLOCALHARDDRIVESLIST, ""
  2601.     ERROR STFQUIT
  2602.     end if
  2603. END SUB
  2604. '*************************************************************************
  2605.  
  2606. PUBLIC SUB GetRemovableDrivesList (szSymbol$) 
  2607. '** Purpose:
  2608. '** Author:
  2609. '** Arguments:
  2610. '** Returns:
  2611. '**     
  2612. '*************************************************************************
  2613. %rem 'DEBUG
  2614.     if szSymbol$ = "" then
  2615.     BadArgErr 1, "GetRemovableDrivesList", szSymbol$
  2616.     end if
  2617. %endrem ' ''DEBUG
  2618.     if FGetRemovableDrivesList(szSymbol$) = FALSE then
  2619.     ErrorMsg SID_ERR_GETREMOVABLEDRIVESLIST, ""
  2620.     ERROR STFQUIT
  2621.     end if
  2622. END SUB
  2623. '*************************************************************************
  2624.  
  2625. PUBLIC SUB GetNetworkDrivesList (szSymbol$) 
  2626. '** Purpose:
  2627. '** Author:
  2628. '** Arguments:
  2629. '** Returns:
  2630. '**     
  2631. '*************************************************************************
  2632. %rem 'DEBUG
  2633.     if szSymbol$ = "" then
  2634.     BadArgErr 1, "GetNetworkDrivesList", szSymbol$
  2635.     end if
  2636. %endrem ' ''DEBUG
  2637.     if FGetNetworkDrivesList(szSymbol$) = FALSE then
  2638.     ErrorMsg SID_ERR_GETNETWORKDRIVESLIST, ""
  2639.     ERROR STFQUIT
  2640.     end if
  2641. END SUB
  2642. '*************************************************************************
  2643.  
  2644. PUBLIC FUNCTION GetEnvVariableValue (szEnvVar$)  AS STRING
  2645. '** Purpose:
  2646. '** Author:
  2647. '** Arguments:
  2648. '** Returns:
  2649. '**     
  2650. '*************************************************************************
  2651. %rem 'DEBUG
  2652.     if szEnvVar$ = "" then
  2653.     BadArgErr 1, "GetEnvVariableValue", szEnvVar$
  2654.     end if
  2655. %endrem ' ''DEBUG
  2656.     DIM cb%, szBuf$, cbRet%
  2657.  
  2658.     cb% = 1024
  2659.     szBuf$ = STRING$(cb%, 32)
  2660.     cbRet% = CInt(GetEnvironmentVariable(szEnvVar$, szBuf$, CLng(cb%)))
  2661.     GetEnvVariableValue = NullTrim(szBuf$)
  2662. %rem 'DEBUG
  2663.     IF cbRet% >= cb% THEN
  2664.     '' StfApiErr saeOvfl, "GetEnvVariableValue", szEnvVar$
  2665.     ErrorMsg SID_ERR_GETENVVARIABLEVALUE, ""
  2666.     ERROR STFQUIT
  2667.     END IF
  2668. %endrem ' ''DEBUG
  2669.     szBuf$ = ""
  2670. END FUNCTION
  2671. '*************************************************************************
  2672.  
  2673. PUBLIC FUNCTION GetNumWinApps () AS INTEGER
  2674. '** Purpose:
  2675. '** Author:
  2676. '** Arguments:
  2677. '** Returns:
  2678. '**     
  2679. '*************************************************************************
  2680.     GetNumWinApps = CInt(WGetNumWinApps())
  2681. END FUNCTION
  2682. '*************************************************************************
  2683.  
  2684. PUBLIC FUNCTION DoesFileExist (szFileName$, mode%)  AS INTEGER
  2685. '** Purpose:
  2686. '** Author:
  2687. '** Arguments:
  2688. '** Returns:
  2689. '**     
  2690. '*************************************************************************
  2691. %rem 'DEBUG
  2692.     if FValidFATPath(szFileName$) = FALSE then
  2693.     BadArgErr 1, "DoesFileExist", szFileName$+", "+STR$(mode%)
  2694.     end if
  2695. %endrem ' ''DEBUG
  2696. '    DoesFileExist = CInt(Lot_DoesFileExist(szFileName$, CLng(mode%)))
  2697.     DoesFileExist = CInt(Lot_DoesFileExist(szFileName$))
  2698. END FUNCTION
  2699. '*************************************************************************
  2700.  
  2701. PUBLIC FUNCTION GetDateOfFile (szFile$)  AS STRING
  2702. '** Purpose:
  2703. '** Author:
  2704. '** Arguments:
  2705. '** Returns:
  2706. '**     
  2707. '*************************************************************************
  2708. %rem 'DEBUG
  2709.     if FValidFATPath(szFile$) = FALSE then
  2710.     BadArgErr 1, "GetDateOfFile", szFile$
  2711.     end if
  2712. %endrem ' ''DEBUG
  2713.     DIM cb%, szBuf$, cbRet&
  2714.  
  2715.     cb% = 20
  2716.     szBuf$ = STRING$(cb%, 32)
  2717.     cbRet& = CbGetDateOfFile(szFile$, szBuf$, CLng(cb%))
  2718.      GetDateOfFile = NullTrim(szBuf$)
  2719.  
  2720. %rem 'DEBUG
  2721.     IF CInt(cbRet&) >= cb% THEN
  2722.     '' StfApiErr saeOvfl, "GetDateOfFile", szFile$
  2723.     ErrorMsg SID_ERR_GETDATEOFFILE, ""
  2724.     ERROR STFQUIT
  2725.     END IF
  2726. %endrem ' ''DEBUG
  2727.     szBuf$ = ""
  2728. END FUNCTION
  2729. '*************************************************************************
  2730.  
  2731. PUBLIC FUNCTION GetYearFromDate (szDate$)  AS INTEGER
  2732. '** Purpose:
  2733. '** Author:
  2734. '** Arguments:
  2735. '** Returns:
  2736. '**     
  2737. '*************************************************************************
  2738. %rem 'DEBUG
  2739.     if szDate = "" then
  2740.     BadArgErr 1, "GetYearFromDate", szDate$
  2741.     end if
  2742. %endrem ' ''DEBUG
  2743.     GetYearFromDate = VAL(MID$(szDate$, 1, 4))
  2744. END FUNCTION
  2745. '*************************************************************************
  2746.  
  2747. PUBLIC FUNCTION GetMonthFromDate (szDate$)  AS INTEGER
  2748. '** Purpose:
  2749. '** Author:
  2750. '** Arguments:
  2751. '** Returns:
  2752. '**     
  2753. '*************************************************************************
  2754. %rem 'DEBUG
  2755.     if szDate = "" then
  2756.     BadArgErr 1, "GetMonthFromDate", szDate$
  2757.     end if
  2758. %endrem ' ''DEBUG
  2759.     GetMonthFromDate = VAL(MID$(szDate$, 6, 2))
  2760. END FUNCTION
  2761. '*************************************************************************
  2762.  
  2763. PUBLIC FUNCTION GetDayFromDate (szDate$)  AS INTEGER
  2764. '** Purpose:
  2765. '** Author:
  2766. '** Arguments:
  2767. '** Returns:
  2768. '**     
  2769. '*************************************************************************
  2770. %rem 'DEBUG
  2771.     if szDate = "" then
  2772.     BadArgErr 1, "GetDayFromDate", szDate$
  2773.     end if
  2774. %endrem ' ''DEBUG
  2775.     GetDayFromDate = VAL(MID$(szDate$, 9, 2))
  2776. END FUNCTION
  2777. '*************************************************************************
  2778.  
  2779. PUBLIC FUNCTION GetHourFromDate (szDate$)  AS INTEGER
  2780. '** Purpose:
  2781. '** Author:
  2782. '** Arguments:
  2783. '** Returns:
  2784. '**     
  2785. '*************************************************************************
  2786. %rem 'DEBUG
  2787.     if szDate = "" then
  2788.     BadArgErr 1, "GetHourFromDate", szDate$
  2789.     end if
  2790. %endrem ' ''DEBUG
  2791.     GetHourFromDate = VAL(MID$(szDate$, 12, 2))
  2792. END FUNCTION
  2793. '*************************************************************************
  2794.  
  2795. PUBLIC FUNCTION GetMinuteFromDate (szDate$)  AS INTEGER
  2796. '** Purpose:
  2797. '** Author:
  2798. '** Arguments:
  2799. '** Returns:
  2800. '**     
  2801. '*************************************************************************
  2802. %rem 'DEBUG
  2803.     if szDate = "" then
  2804.     BadArgErr 1, "GetMinuteFromDate", szDate$
  2805.     end if
  2806. %endrem ' ''DEBUG
  2807.     GetMinuteFromDate = VAL(MID$(szDate$, 15, 2))
  2808. END FUNCTION
  2809. '*************************************************************************
  2810.  
  2811. PUBLIC FUNCTION GetSecondFromDate (szDate$)  AS INTEGER
  2812. '** Purpose:
  2813. '** Author:
  2814. '** Arguments:
  2815. '** Returns:
  2816. '**     
  2817. '*************************************************************************
  2818. %rem 'DEBUG
  2819.     if szDate = "" then
  2820.     BadArgErr 1, "GetSecondFromDate", szDate$
  2821.     end if
  2822. %endrem ' ''DEBUG
  2823.     GetSecondFromDate = VAL(MID$(szDate$, 18, 2))
  2824. END FUNCTION
  2825. '*************************************************************************
  2826.  
  2827. PUBLIC FUNCTION GetVersionOfFile (szFile$)  AS STRING
  2828. '** Purpose:
  2829. '** Author:
  2830. '** Arguments:
  2831. '** Returns:
  2832. '**     
  2833. '*************************************************************************
  2834. %rem 'DEBUG
  2835.     if FValidFATPath(szFile$) = FALSE then
  2836.     BadArgErr 1, "GetVersionOfFile", szFile$
  2837.     end if
  2838. %endrem ' ''DEBUG
  2839.     DIM cb%, szBuf$, cbRet&
  2840.  
  2841.     cb% = 30
  2842.     szBuf$ = STRING$(cb%, 32) 
  2843.     cbRet& = CbGetVersionOfFile(szFile$, szBuf$, CLng(cb%))
  2844.     GetVersionOfFile = NullTrim(szBuf$)
  2845. %rem 'DEBUG
  2846.     IF CInt(cbRet&) >= cb% THEN
  2847.     '' StfApiErr saeOvfl, "GetVersionOfFile", szFile$
  2848.     ErrorMsg SID_ERR_GETVERSIONOFFILE, ""
  2849.     ERROR STFQUIT
  2850.     END IF
  2851. %endrem ' ''DEBUG
  2852.     szBuf$ = ""
  2853. END FUNCTION
  2854. '*************************************************************************
  2855.  
  2856. PUBLIC FUNCTION GetVersionNthField (szVersion$, nField%)  AS LONG
  2857. '** Purpose:
  2858. '** Author:
  2859. '** Arguments:
  2860. '** Returns:
  2861. '**     
  2862. '*************************************************************************
  2863. %rem 'DEBUG
  2864.     if (nField% < 1) OR (nField% > 4) then
  2865.     BadArgErr 2, "GetVersionNthField", szVersion$+", "+STR$(nField%)
  2866.     end if
  2867. %endrem ' ''DEBUG
  2868.     GetVersionNthField = LGetVersionNthField(szVersion$, CLng(nField%))
  2869. END FUNCTION
  2870. '*************************************************************************
  2871.  
  2872. PUBLIC FUNCTION GetSizeOfFile (szFile$)  AS LONG
  2873. '** Purpose:
  2874. '** Author:
  2875. '** Arguments:
  2876. '** Returns:
  2877. '**     
  2878. '*************************************************************************
  2879. %rem 'DEBUG
  2880.     if FValidFATPath(szFile$) = FALSE then
  2881.     BadArgErr 1, "GetSizeOfFile", szFile$
  2882.     end if
  2883. %endrem ' ''DEBUG
  2884.     GetSizeOfFile = LcbGetSizeOfFile(szFile$)
  2885. END FUNCTION
  2886. '*************************************************************************
  2887.  
  2888. PUBLIC FUNCTION FindTargetOnEnvVar (szFile$, szEnvVar$)  AS STRING
  2889. '** Purpose:
  2890. '** Author:
  2891. '** Arguments:
  2892. '** Returns:
  2893. '**     
  2894. '*************************************************************************
  2895. %rem 'DEBUG
  2896.     if CchlValidFATSubPath(szFile$) = 0 then
  2897.     n% = 1
  2898.     elseif szEnvVar$ = "" then
  2899.     n% = 2
  2900.     else
  2901.     n% = 0
  2902.     end if
  2903.     if n% > 0 then
  2904.     BadArgErr n%, "FindTargetOnEnvVar", szFile$+", "+szEnvVar$
  2905.     end if
  2906. %endrem ' ''DEBUG
  2907.     DIM cb%, szBuf$, cbRet&
  2908.  
  2909.     cb% = 512
  2910.     szBuf$ = STRING$(cb%, 32)   
  2911.     cbRet& = CbFindTargetOnEnvVar(szFile$, szEnvVar$, szBuf$, CLng(cb%))
  2912.     IF CInt(cbRet&) >= cb% THEN
  2913.     ErrorMsg SID_ERR_FINDTARGETONENVVAR, ""
  2914.     ERROR STFQUIT
  2915.     END IF
  2916.     szBuf$ = NullTrim(szBuf$)
  2917.     IF MID$(szBuf$, 1, 1) = "\" THEN
  2918.        szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  2919.     ELSEIF Len(szBuf$) > 0 AND MID$(szBuf$, 2, 1) <> ":" THEN
  2920.        szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  2921.     END IF
  2922.     FindTargetOnEnvVar = szBuf$
  2923.     szBuf$ = ""
  2924. END FUNCTION
  2925. '*************************************************************************
  2926.  
  2927. PUBLIC FUNCTION FindFileInTree (szFile$, szDir$)  AS STRING
  2928. '** Purpose:
  2929. '** Author:
  2930. '** Arguments:
  2931. '** Returns:
  2932. '**     
  2933. '*************************************************************************
  2934. %rem 'DEBUG
  2935.     if CchlValidFATSubPath(szFile$) = 0 then
  2936.     n% = 1
  2937.     elseif FValidFATDir(szDir$) = FALSE then
  2938.     n% = 2
  2939.     else
  2940.     n% = 0
  2941.     end if
  2942.     if n% > 0 then
  2943.     BadArgErr n%, "FindFileInTree", szFile$+", "+szDir$
  2944.     end if
  2945. %endrem ' ''DEBUG
  2946.       DIM cb%, szBuf$, cbRet&
  2947.  
  2948.     cb% = 512
  2949.     szBuf$ = STRING$(cb%, 32)
  2950.     cbRet& = CbFindFileInTree(szFile$, szDir$, szBuf$, CLng(cb%))
  2951.     FindFileInTree = NullTrim(szBuf$)
  2952.  
  2953. %rem 'DEBUG
  2954.     IF CInt(cbRet&) >= cb% THEN
  2955.     '' StfApiErr saeOvfl, "FindFileInTree", szFile$+", "+szDir$
  2956.     ErrorMsg SID_ERR_FINDFILEINTREE, ""
  2957.     ERROR STFQUIT
  2958.     END IF
  2959. %endrem ' ''DEBUG
  2960.     szBuf$ = ""
  2961. END FUNCTION
  2962. '*************************************************************************
  2963.  
  2964. PUBLIC FUNCTION GetConfigSmartdrvSize () AS INTEGER
  2965. '** Purpose:
  2966. '** Author:
  2967. '** Arguments:
  2968. '** Returns:
  2969. '**     
  2970. '*************************************************************************
  2971.     GetConfigSmartdrvSize = CInt(WGetConfigSmartdrvSize())
  2972. END FUNCTION
  2973. '*************************************************************************
  2974.  
  2975. PUBLIC FUNCTION GetConfigRamdriveSize () AS INTEGER
  2976. '** Purpose:
  2977. '** Author:
  2978. '** Arguments:
  2979. '** Returns:
  2980. '**     
  2981. '*************************************************************************
  2982.     GetConfigRamdriveSize = CInt(WGetConfigRamdriveSize ())
  2983. END FUNCTION
  2984. '*************************************************************************
  2985.  
  2986. PUBLIC FUNCTION GetConfigNumBuffers () AS INTEGER
  2987. '** Purpose:
  2988. '** Author:
  2989. '** Arguments:
  2990. '** Returns:
  2991. '**     
  2992. '*************************************************************************
  2993.     GetConfigNumBuffers = CInt(WGetConfigNumBuffers())
  2994. END FUNCTION
  2995. '*************************************************************************
  2996.  
  2997. PUBLIC FUNCTION GetConfigNumFiles () AS INTEGER
  2998. '** Purpose:
  2999. '** Author:
  3000. '** Arguments:
  3001. '** Returns:
  3002. '**     
  3003. '*************************************************************************
  3004.     GetConfigNumFiles = CInt(WGetConfigNumFiles())
  3005. END FUNCTION
  3006. '*************************************************************************
  3007.  
  3008. PUBLIC FUNCTION GetConfigLastDrive () AS STRING
  3009. '** Purpose:
  3010. '** Author:
  3011. '** Arguments:
  3012. '** Returns:
  3013. '**     
  3014. '*************************************************************************
  3015.     DIM chRet&
  3016.  
  3017.     chRet& = WGetConfigLastDrive()
  3018.     if chRet& = 0 then
  3019.     GetConfigLastDrive = ""
  3020.     else
  3021.     GetConfigLastDrive = CHR$(chRet&)
  3022.     end if
  3023. END FUNCTION
  3024. '*************************************************************************
  3025.  
  3026. PUBLIC FUNCTION IsDriverInConfig (szDrv$)  AS INTEGER
  3027. '** Purpose:
  3028. '** Author:
  3029. '** Arguments:
  3030. '** Returns:
  3031. '**     
  3032. '*************************************************************************
  3033. %rem 'DEBUG
  3034.     if szDrv$ = "" then
  3035.     BadArgErr 1, "IsDriverInConfig", szDrv$
  3036.     end if
  3037. %endrem ' ''DEBUG
  3038.     IsDriverInConfig = CInt(FIsDriverInConfig(szDrv$))
  3039. END FUNCTION
  3040. '*************************************************************************
  3041.  
  3042. PUBLIC FUNCTION GetProcessorType () AS INTEGER
  3043. '** Purpose:
  3044. '** Author:
  3045. '** Arguments:
  3046. '** Returns:
  3047. '**     
  3048. '*************************************************************************
  3049.     DIM rSysInf as SysInfoType
  3050.  
  3051.     GetProcessorType = 0
  3052.  
  3053.     GetSystemInfo  rSysInf
  3054.  
  3055.     IF rSysInf.dwProcessorType = PROCESSOR_INTEL_PENTIUM THEN
  3056.     GetProcessorType = 4
  3057.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_486 THEN
  3058.     GetProcessorType = 4
  3059.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_386 THEN
  3060.     GetProcessorType = 3
  3061.     ELSEIF rSysInf.dwProcessorType = PROCESSOR_INTEL_860 THEN
  3062.     GetProcessorType = 1
  3063.     END IF
  3064.  
  3065. END FUNCTION
  3066. '*************************************************************************
  3067.  
  3068. PUBLIC SUB GetParallelPortsList (szSymbol$) 
  3069. '** Purpose:
  3070. '** Author:
  3071. '** Arguments:
  3072. '** Returns:
  3073. '**     
  3074. '*************************************************************************
  3075. %rem 'DEBUG
  3076.     if szSymbol$ = "" then
  3077.     BadArgErr 1, "GetParallelPortsList", szSymbol$
  3078.     end if
  3079. %endrem ' ''DEBUG
  3080.     if FGetParallelPortsList(szSymbol$) = FALSE then
  3081.     ErrorMsg SID_ERR_GETPARALLELPORTSLIST, ""
  3082.     ERROR STFQUIT
  3083.     end if
  3084. END SUB
  3085. '*************************************************************************
  3086.  
  3087. PUBLIC SUB GetSerialPortsList (szSymbol$) 
  3088. '** Purpose:
  3089. '** Author:
  3090. '** Arguments:
  3091. '** Returns:
  3092. '**     
  3093. '*************************************************************************
  3094. %rem 'DEBUG
  3095.     if szSymbol$ = "" then
  3096.     BadArgErr 1, "GetSerialPortsList", szSymbol$
  3097.     end if
  3098. %endrem ' ''DEBUG
  3099.     if FGetSerialPortsList(szSymbol$) = FALSE then
  3100.     ErrorMsg SID_ERR_GETSERIALPORTSLIST, ""
  3101.     ERROR STFQUIT
  3102.     end if
  3103. END SUB
  3104. '*************************************************************************
  3105.  
  3106. PUBLIC FUNCTION Has87MathChip () AS INTEGER
  3107. '** Purpose:
  3108. '** Author:
  3109. '** Arguments:
  3110. '** Returns:
  3111. '**     
  3112. '*************************************************************************
  3113.     Has87MathChip = CInt(FHas87MathChip())
  3114. END FUNCTION
  3115. '*************************************************************************
  3116.  
  3117. PUBLIC FUNCTION HasMonochromeDisplay () AS INTEGER
  3118. '** Purpose:
  3119. '** Author:
  3120. '** Arguments:
  3121. '** Returns:
  3122. '**     
  3123. '*************************************************************************
  3124.     HasMonochromeDisplay = CInt(FHasMonochromeDisplay())
  3125. END FUNCTION
  3126. '*************************************************************************
  3127.  
  3128. PUBLIC FUNCTION HasMouseInstalled () AS INTEGER
  3129. '** Purpose:
  3130. '** Author:
  3131. '** Arguments:
  3132. '** Returns:
  3133. '**     
  3134. '*************************************************************************
  3135.     HasMouseInstalled = CInt(FHasMouseInstalled())
  3136. END FUNCTION
  3137. '*************************************************************************
  3138.  
  3139. PUBLIC FUNCTION DoesDirExist (szDir$)  AS INTEGER
  3140. '** Purpose:
  3141. '** Author:
  3142. '** Arguments:
  3143. '** Returns:
  3144. '**     
  3145. '*************************************************************************
  3146. %rem 'DEBUG
  3147.     if FValidFATDir(szDir$) = FALSE then
  3148.     BadArgErr 1, "DoesDirExist", szDir$
  3149.     end if
  3150. %endrem ' ''DEBUG
  3151.     DoesDirExist = CInt(Lot_DoesDirExist(szDir$))
  3152. END FUNCTION
  3153. '*************************************************************************
  3154.  
  3155. PUBLIC FUNCTION DoesIniSectionExist (szFile$, szSect$)  AS INTEGER
  3156. '** Purpose:
  3157. '** Author:
  3158. '** Arguments:
  3159. '** Returns:
  3160. '**     
  3161. '*************************************************************************
  3162. %rem 'DEBUG
  3163.     if FValidIniFile(szFile$) = FALSE then
  3164.     BadArgErr 1, "DoesIniSectionExist", szFile$+", "+szSect$
  3165.     end if
  3166. %endrem ' ''DEBUG
  3167.     DoesIniSectionExist = CInt(FDoesIniSectionExist(szFile$, szSect$))
  3168. END FUNCTION
  3169. '*************************************************************************
  3170.  
  3171. PUBLIC FUNCTION DoesIniKeyExist (szFile$, szSect$, szKey$)  AS INTEGER
  3172. '** Purpose:
  3173. '** Author:
  3174. '** Arguments:
  3175. '** Returns:
  3176. '**     
  3177. '*************************************************************************
  3178. %rem 'DEBUG
  3179.     if FValidIniFile(szFile$) = FALSE then
  3180.     n% = 1
  3181.     elseif szKey$ = "" then
  3182.     n% = 3
  3183.     else
  3184.     n% = 0
  3185.     end if
  3186.     if n% > 0 then
  3187.     BadArgErr n%, "DoesIniKeyExist", szFile$+", "+szSect$+", "+szKey$
  3188.     end if
  3189. %endrem ' ''DEBUG
  3190.  
  3191.     DoesIniKeyExist = CInt(FDoesIniKeyExist(szFile$, szSect$, szKey$))
  3192. END FUNCTION
  3193. '*************************************************************************
  3194.  
  3195. PUBLIC FUNCTION GetIniKeyString (szFile$, szSect$, szKey$)  AS STRING
  3196. '** Purpose:
  3197. '**     
  3198. '**     
  3199. '** Author:
  3200. '** Arguments:
  3201. '**     
  3202. '**     
  3203. '** Returns:
  3204. '**     
  3205. '*************************************************************************
  3206.  
  3207. %rem 'DEBUG
  3208.     if FValidIniFile(szFile$) = FALSE then
  3209.     n% = 1
  3210.     elseif szKey$ = "" then
  3211.     n% = 3
  3212.     else
  3213.     n% = 0
  3214.     end if
  3215.     if n% > 0 then
  3216.     BadArgErr n%, "GetIniKeyString", szFile$+", "+szSect$+", "+szKey$
  3217.     end if
  3218. %endrem ' ''DEBUG
  3219.       DIM cb&, szBuf$, cbRet&
  3220.  
  3221.     cb& = 512
  3222.     szBuf$ = CreateBuffer(cb&)
  3223.     cbRet& = GetPrivateProfileString (szSect$, szKey$, "", szBuf$, cb&, szFile$)
  3224.  
  3225.     GetIniKeyString = NullTrim(szBuf$)
  3226.  
  3227. %rem 'DEBUG
  3228.     IF CInt(cbRet&) >= cb% THEN
  3229.     '' StfApiErr saeOvfl, "GetIniKeyString", szFile$+", "+szSect$+", "+szKey$
  3230.     ErrorMsg SID_ERR_GETINIKEYSTRING, ""
  3231.     ERROR STFQUIT
  3232.     END IF
  3233. %endrem ' ''DEBUG
  3234.     szBuf$ = ""
  3235. END FUNCTION
  3236. '*************************************************************************
  3237.  
  3238. PUBLIC SUB SetListItem (szSymbol$, n%, szListItem$) 
  3239. '** Purpose:
  3240. '** Author:
  3241. '** Arguments:
  3242. '*************************************************************************
  3243.   DIM ListLen%, i%
  3244.     ListLen% = GetListLength(szSymbol)
  3245.     IF n% < 0 THEN
  3246.        ErrorMsg SID_ERR_GETLISTITEM2, LSI_INFO(13) & _
  3247.          " : " & LSI_INFO(12) & " : " & LSI_INFO(11)
  3248.        ERROR STFQUIT
  3249.     ELSEIF n% <= ListLen% THEN
  3250.         ReplaceListItem szSymbol$, n%, szListItem$
  3251.     ELSE
  3252.         FOR i% = ListLen%+1 TO n%-1 STEP 1
  3253.         AddListItem szSymbol$, ""
  3254.         NEXT
  3255.         AddListItem szSymbol$, szListItem$
  3256.     END IF
  3257. END SUB
  3258.  
  3259. '***********************************************************************
  3260. '**
  3261. '**  SUB ErrorMsg (nMsg%, szErr$)
  3262. '**
  3263. '**  Description:  
  3264. '**      Display an error message
  3265. '**    
  3266. '**  Explicit Parameters:
  3267. '**   nMsg%    The error message number to display. Use 0 if none
  3268. '**   szErr$   An extra error message that is appended after a
  3269. '**            space only the message in nMsg%
  3270. '**    
  3271. '**  Implicit Parameters:
  3272. '**    
  3273. '***********************************************************************
  3274.  
  3275. PUBLIC SUB ErrorMsg (nMsg%, szErr$)
  3276.  
  3277.    DIM sz$, notused&
  3278.  
  3279.    IF nMsg% <> 0 THEN
  3280.       sz$ = LdString(nMsg%)
  3281.       IF szErr$ <> "" THEN sz$ = sz$ + " " + szErr$
  3282.    ELSE
  3283.       sz$ = szErr$
  3284.    END IF
  3285.    'MessageBox sz$, MB_SYSTEMMODAL + MB_OK + MB_ICONEXCLAMATION, LdString(SID_TKT_STD_TITLE)
  3286.    notused = DoMsgBox (sz$, LdString(SID_TKT_STD_TITLE) , MB_OK + MB_ICONEXCLAMATION)
  3287.  
  3288. END SUB
  3289.  
  3290. '***********************************************************************
  3291. '**
  3292. '**  SUB RegErrorMsg (msg&, szKey$, szItem$, szValue$)
  3293. '**
  3294. '**  Description:  
  3295. '**      Display an error message
  3296. '**    
  3297. '**  Explicit Parameters:
  3298. '**    
  3299. '**  Implicit Parameters:
  3300. '**    
  3301. '***********************************************************************
  3302.  
  3303. PUBLIC SUB RegErrorMsg (msg%, szKey$, szItem$, szValue$)
  3304.  
  3305.    DIM sz$, notused&
  3306.  
  3307.     sz$ = LdString(msg%)+szKey$
  3308.     If NOT szItem$ ="" Then
  3309.         sz$ = sz$+"("+szItem$+") "
  3310.     End If
  3311.     If NOT szValue$ ="" Then
  3312.         sz$ = sz$+": "+szValue$
  3313.     End If
  3314.    notused = DoMsgBox (sz$, LdString(SID_TKT_REG_ERR_TITLE) , MB_OK + MB_ICONEXCLAMATION)
  3315.  
  3316. END SUB
  3317.  
  3318.  
  3319.  
  3320. '***********************************************************************
  3321. '**
  3322. '**  Name: FatalErrorMsg 
  3323. '**  Description:  
  3324. '**      Display an error message and exit the script
  3325. '**    
  3326. '**  Explicit Parameters:
  3327. '**   nMsg%    The error message number to display. Use 0 if none
  3328. '**   szErr$   An extra error message that is appended after a
  3329. '**            space only the message in nMsg%
  3330. '**   err%     Number to be passed to ERROR function
  3331. '**    
  3332. '**  Implicit Parameters:
  3333. '**    
  3334. '***********************************************************************
  3335.  
  3336. PUBLIC SUB FatalErrorMsg (nMsg%, szErr$, nErr%)
  3337.  
  3338.    ErrorMsg nMsg%, szErr$
  3339.    ERROR nErr%
  3340.  
  3341. END SUB
  3342.  
  3343. '***********************************************************************
  3344. '**
  3345. '**  Name: ErrorMsgNoDlgExit
  3346. '**  Description:  
  3347. '**      Display an error message and set symbol to no exit dlg
  3348. '**    
  3349. '**  Explicit Parameters:
  3350. '**   nMsg%    The error message number to display. Use 0 if none
  3351. '**   szErr$   An extra error message that is appended after a
  3352. '**            space only the message in nMsg%
  3353. '**
  3354. '**  Out symbols:
  3355. '**   __LASTSTATUS   Set to "Q" to tell script not to quit   
  3356. '**    
  3357. '**  Implicit Parameters:
  3358. '**    
  3359. '***********************************************************************
  3360.  
  3361. PUBLIC SUB ErrorMsgNoDlgExit (nMsg%, szErr$)
  3362.  
  3363.    ErrorMsg nMsg%, szErr$
  3364.    SetListItem "__LASTSTATUS", 1, "Q"
  3365.  
  3366. END SUB
  3367.  
  3368. PUBLIC SUB LdStringInit () 
  3369. '** Purpose: Ensure the initialization of SYM_CUIDLL and loading of libraries
  3370. '                                before any LdString calls
  3371. '** Author:             Jack Donohue
  3372. '** Arguments:  None
  3373. '** Returns:    None
  3374. '*************************************************************************
  3375.   DIM cuidll$, t$, i%, s$, hDll&
  3376.   DIM szBuf$, cbBuf&, wRet&
  3377.  
  3378. if fLdStringInit = 0  Then
  3379.     fLdStringInit = 1
  3380.    t$ = GetSymbolValue(SYM_STF_CWDDIR$)
  3381.    cuidll$ = GetIniKeyString(t$+gINSTALLINI$, "TOOLKIT", SYM_CUIDLL$)
  3382.    If cuidll$ = "" Then
  3383.     cuidll$ = "MSCUISTF.DLL"
  3384.    End If
  3385.    SetSymbolValue SYM_CUIDLL$, cuidll$
  3386.     i% = 1
  3387.     s$ = "Start"
  3388.     WHILE (s$ <> "")
  3389.         s$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), i%, "") 
  3390.         if s$ <> "" then
  3391.             hDll& = GetModuleHandle(s$)
  3392.             If hDll& = 0 Then
  3393.                 hDll& = LoadLibrary(s$)
  3394.             End if
  3395.             If hDll& = 0 Then
  3396.                 print "Couldn't get module handle:" s$
  3397.             End If
  3398.         end if
  3399.         i% = i% + 1
  3400.      WEND
  3401. End If
  3402. END SUB
  3403.  
  3404. PUBLIC FUNCTION LdString (TextID%) AS STRING
  3405. '** Purpose:
  3406. '** Author:
  3407. '** Arguments:
  3408. '** Returns:
  3409. '*************************************************************************
  3410.  
  3411.    DIM rc&, s$, i%, hDll&, cb& 
  3412.     ' Maximum string size because of RED limitation
  3413.     cb& = 256
  3414.  
  3415. ' Modify routine to search in other DLLs if string not found
  3416. ' ---------------------------
  3417.     if fLdStringInit = 0 Then
  3418.         LdStringInit
  3419.     End If
  3420.     g_strbuf$ = CreateBuffer(cb&)
  3421.     rc& = LoadString(HinstCui(), CLng(TextID%), g_strbuf$, cb&-1)
  3422.     ' Not found in generic dll
  3423.     If rc& = 0 Then
  3424.         i% = 2
  3425.         WHILE (TRUE)
  3426.             s$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), i%, "") 
  3427.             if s$ <> "" then
  3428.                 hDll& = GetModuleHandle(s$)
  3429.                 If hDll& = 0 Then
  3430.                     hDll& = LoadLibrary(s$)
  3431.                 End if
  3432.                 If hDll& <> 0 Then
  3433.                     g_strbuf$ = CreateBuffer(cb&)
  3434.                     rc& = LoadString(hDll&, CLng(TextID%), g_strbuf$, cb&-1)
  3435.                     If rc& <> 0 Then
  3436.                         goto FoundTheString
  3437.                     End If
  3438.                 End If
  3439.             else
  3440.                 goto label1
  3441.             end if
  3442.             i% = i% + 1
  3443.         WEND
  3444.     End If
  3445. label1:
  3446.     ASSERT rc& <> 0, "String " + STR(TextID%) + " Not Found"
  3447. FoundTheString:
  3448.     LdString = LEFT(g_strbuf$, CINT(rc&))
  3449.     g_strbuf$ = ""
  3450.  
  3451. END FUNCTION
  3452.  
  3453. '** FUNCTION Lot_CleanPath (path$) AS INTEGER
  3454. '**
  3455. '** Purpose: Clean a FAT path. Removes .. and . Makes path lower case
  3456. '**          and ensures that the path has a trailing backslash.
  3457. '**            
  3458. '** Author:    DND
  3459. '** Arguments: path$. The path to modify
  3460. '** Returns:   TRUE if path is valid
  3461. '*************************************************************************
  3462.  
  3463. PUBLIC FUNCTION Lot_CleanPath (path$) AS INTEGER
  3464.  
  3465.    DIM rv%, lastchar$
  3466.    rv% = FCleanFatPath(path$)
  3467.    IF rv% <> FALSE THEN
  3468.         path = NullTrim(path$)
  3469.         lastchar$ = RIGHT$(path$, 1)
  3470.       IF lastchar$ <> "\" THEN path$ = path$ + "\"
  3471.       path$ = LCASE$(path$)
  3472.       Lot_CleanPath = TRUE
  3473.    ELSE
  3474.       Lot_CleanPath = FALSE
  3475.    END IF
  3476.  
  3477. END FUNCTION
  3478.  
  3479. 'This was MS API but is modified by Marcel( (takes a delimiter char)
  3480. '*************************************************************************
  3481.  
  3482. PUBLIC FUNCTION Lot_GetNthFieldFromIniString (szLine$, iField%, sp$)  AS STRING
  3483. '** Purpose:
  3484. '** Author:
  3485. '** Arguments:
  3486. '** Returns:
  3487. '**     
  3488. '*************************************************************************
  3489.     DIM szStart$, i%, iNew%
  3490.  
  3491.     IF sp$ = "" THEN
  3492.     sp$ = ","
  3493.     END IF
  3494.     IF iField% < 1 THEN
  3495.     ErrorMsg SID_ERR_LOT_GNFFIS, ""
  3496.     ERROR STFQUIT
  3497.     END IF
  3498.     szStart$ = szLine$
  3499.     IF iField% <> 1 THEN
  3500.     FOR i% = 2 TO iField% STEP 1
  3501.         iNew% = INSTR(szStart$, sp$)
  3502.         IF iNew% = 0 THEN
  3503.         Lot_GetNthFieldFromIniString = ""
  3504.         GOTO GNFFIS_END
  3505.         END IF
  3506.         szStart$ = MID$(szStart$, (iNew% + 1),100)
  3507.     NEXT
  3508.     END IF
  3509.  
  3510.     iNew% = INSTR(szStart$, sp$)
  3511.     IF iNew% <> 0 THEN
  3512.     szStart$ = MID$(szStart$, 1, (iNew% - 1))
  3513.     END IF
  3514.  
  3515.     ' tqi - not sure we want to change this - depends upon what is handed in!
  3516.     ' don't know the delimiters on it.??? - caller responsible for trimming?
  3517.     ' can't find it's use -tqi
  3518.      Lot_GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  3519.  
  3520. GNFFIS_END:
  3521.  
  3522. END FUNCTION
  3523.  
  3524. '*************************************************************************
  3525. '****************  Setup Basic String Functions  *********************
  3526. '*************************************************************************
  3527.  
  3528.  
  3529. '************************************************************************
  3530. DIM gDEBUG%
  3531. PUBLIC SUB SetUpAPI 
  3532.  
  3533. '*******EXECUTABLE CODE******************
  3534. 'This initializes the toolkit. 
  3535. ' This is called from initialize in main, as the very first action
  3536. 'TRAP CleanupTrap From "MSSHLSTF.DLL"
  3537.  
  3538. 'End Trap
  3539.  
  3540.   DIM cuidll$, gCursorSave&, notused%
  3541.  
  3542.   gCursorSave& = ShowWaitCursor()
  3543.   hSetup = InitSetup(COMMAND$)
  3544.  
  3545.   IF ENVIRON$(gLOTUS_DEBUG) <> "" THEN
  3546.       gDEBUG%=TRUE
  3547.   ELSE
  3548.       gDEBUG%=FALSE
  3549.   END IF
  3550.  
  3551.  
  3552. 'ON ERROR GOTO QUIT
  3553.  
  3554. 'JMD
  3555. ' This symbol now returns a list of strings which can be parsed using
  3556. ' Lot_GetNthFieldFromIniString
  3557. ' ----------------------------
  3558.     if fLdStringInit = 0 Then
  3559.         LdStringInit
  3560.     End If
  3561.   cuidll$ =  Lot_GetNthFieldFromIniString (GetSymbolValue(SYM_CUIDLL$), 1, "") 
  3562.   SetBitmap cuidll$, LOGO
  3563.   notused% = FLotusInitialize (LSI_INFO(4))
  3564.  
  3565.   '** DND: Set the K and MB strings
  3566.   gStrK$  = LdString(SID_KBYTE_CHAR)
  3567.   gStrMB$ = LdString(SID_MBYTE_CHAR)
  3568.  
  3569. END SUB
  3570.  
  3571. PUBLIC SUB      ASSERT (assertion%, msg$)
  3572.    DIM notused&
  3573.    If assertion% = FALSE Then
  3574.       If gDEBUG% = TRUE Then
  3575.      notused& = DoMsgBox (LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & _
  3576.           LSI_INFO(11) + CHR(10) + msg$ , _
  3577.           "ASSERT!!", MB_OK + MB_ICONEXCLAMATION )
  3578.  
  3579.      'MessageBox LSI_INFO(13) & " : " & LSI_INFO(12) & " : " & _
  3580.           'LSI_INFO(11) + CHR(10) + msg$ , _
  3581.           'MB_OK + MB_ICONEXCLAMATION, "ASSERT!!"
  3582.      ERROR STFQUIT
  3583.       End If
  3584.    End If
  3585.  
  3586. END SUB
  3587. '*************************************************************************
  3588. PUBLIC SUB WriteToFile(szFile$,sz$) 
  3589. '** Purpose:   Writes the string sz$ to the file szFile$
  3590. '** Author:    MZ,TV
  3591. '** Arguments: szFile$,sz$
  3592. '** Returns: 
  3593. '**     
  3594. '*************************************************************************
  3595.     IF FWriteToFile(szFile$,sz$) = FALSE THEN
  3596.     ErrorMsg SID_ERR_WRITETOLOGFILE, szFile$ + ":" + sz$
  3597.     ERROR STFQUIT
  3598.     END IF
  3599. END SUB
  3600. '**************************************************************************
  3601.  
  3602.  
  3603. PUBLIC FUNCTION Lot_RegCreateKeyEx(ByVal hKey&,ByVal szKey$) AS LONG
  3604. '** Purpose:  
  3605. '** Author:   Pam Donahue
  3606. '** Arguments: 
  3607. '** Returns: 
  3608. '**     
  3609. '*************************************************************************
  3610.     Lot_RegCreateKeyEx = CreateRegKeyEx(hKey&,szKey$)
  3611. END FUNCTION
  3612.  
  3613. '**************************************************************************
  3614.  
  3615.  
  3616. PUBLIC FUNCTION Lot_RegDelAllSubKeys(ByVal hKey&,ByVal szKey$) AS LONG
  3617. '** Purpose:  
  3618. '** Author:   Pam Donahue
  3619. '** Arguments: 
  3620. '** Returns: 
  3621. '**     
  3622. '*************************************************************************
  3623.     Lot_RegDelAllSubKeys = DeleteAllSubKeys(hKey&,szKey$)
  3624. END FUNCTION
  3625.  
  3626.  
  3627. '**************************************************************************
  3628.  
  3629.  
  3630. PUBLIC FUNCTION Lot_DoesRegKeyExistEx(ByVal hKey&,ByVal szKey$) AS LONG
  3631. '** Purpose:  
  3632. '** Author:   Pam Donahue
  3633. '** Arguments: 
  3634. '** Returns: 
  3635. '**     
  3636. '*************************************************************************
  3637.     Lot_DoesRegKeyExistEx = DoesRegKeyExistEx(hKey&,szKey$)
  3638. END FUNCTION
  3639.  
  3640. '**************************************************************************
  3641.  
  3642.  
  3643. PUBLIC FUNCTION Lot_DeleteRegKeyEx(ByVal hKey&,ByVal szKey$) AS LONG
  3644. '** Purpose:  
  3645. '** Author:   Pam Donahue
  3646. '** Arguments: 
  3647. '** Returns: 
  3648. '**     
  3649. '*************************************************************************
  3650.     Lot_DeleteRegKeyEx = DeleteRegKeyEx(hKey&,szKey$)
  3651. END FUNCTION
  3652.  
  3653. '**************************************************************************
  3654.  
  3655.  
  3656. PUBLIC FUNCTION Lot_CreateRegKeyValueEx(ByVal hKey&,        ByVal szSubKey$,_
  3657.                                         ByVal szValueName$, ByVal dwType&,_
  3658.                                         ByVal lpValueData as variant, ByVal dwDataLen& ) AS LONG
  3659. '** Purpose:  
  3660. '** Author:   Pam Donahue
  3661. '** Arguments: 
  3662. '** Returns: 
  3663. '**     
  3664. '*************************************************************************
  3665.  
  3666.     Dim regstatus&, notused&
  3667.     
  3668.     if DoesRegKeyExistEx(ByVal hKey&, ByVal szSubKey$) <> 1 then
  3669.       regstatus = CreateRegKeyEx(hKey&,szSubKey$)
  3670.     end if
  3671.     
  3672.     SELECT CASE dwType&
  3673.     CASE REG_SZ
  3674.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3675.       
  3676.     CASE REG_EXPAND_SZ
  3677.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3678.       
  3679.     CASE REG_DWORD
  3680.       Lot_CreateRegKeyValueEx = CreateRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,dwDataLen&,lpValueData)
  3681.     
  3682.     CASE ELSE
  3683.        notused& = DoMsgBox("Lot_CreateRegKeyValueEx: ValueData illegal type", "WRONG PARAMTER VALUE" ,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  3684.       
  3685.     END SELECT
  3686.     
  3687. END FUNCTION
  3688. '**************************************************************************
  3689.  
  3690.  
  3691.  
  3692. PUBLIC FUNCTION Lot_SetRegKeyValueEx(ByVal hKey&, ByVal szSubKey$,_
  3693.                                      ByVal szValueName$, dwType&,_
  3694.                                      ByVal lpValueData as variant,ByVal dwDataLen&) AS LONG
  3695. '** Purpose:  
  3696. '** Author:   Pam Donahue
  3697. '** Arguments: 
  3698. '** Returns: 
  3699. '**     
  3700. '*************************************************************************
  3701.     Dim notused&
  3702.  
  3703.     SELECT CASE dwType&
  3704.     CASE REG_SZ
  3705.       Lot_SetRegKeyValueEx = SetRegKeyValueExS(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3706.       
  3707.     CASE REG_EXPAND_SZ
  3708.       Lot_SetRegKeyValueEx = SetRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3709.       
  3710.     CASE REG_DWORD
  3711.       Lot_SetRegKeyValueEx = SetRegKeyValueExD(hKey&,szSubKey$,szValueName$,dwType&,lpValueData,dwDataLen&)
  3712.     
  3713.     CASE ELSE
  3714.        notused& = DoMsgBox("Lot_SetRegKeyValueEx: ValueData illegal type", "WRONG PARAMTER VALUE" ,MB_TASKMODAL+MB_ICONHAND+MB_OK)
  3715.       
  3716.     END SELECT
  3717.     
  3718. END FUNCTION
  3719. '**************************************************************************
  3720.  
  3721.  
  3722. PUBLIC FUNCTION Lot_GetRegKeyValueEx(ByVal hKey&, ByVal szSubKey$,_
  3723.                                      ByVal szValueName$, dwType&,_
  3724.                                      lpBuf as variant, cbBuf&) AS LONG
  3725. '** Purpose:  
  3726. '** Author:   Pam Donahue
  3727. '** Arguments: 
  3728. '** Returns: 
  3729. '**     
  3730. '*************************************************************************
  3731.    dim dwBuf&, cbStrBuf&
  3732.    dim strBuf AS STRING
  3733.    dim requestType&
  3734.  
  3735.    cbStrBuf& = 1024
  3736.    strBuf$ = CreateBuffer(cbStrBuf&)
  3737.    requestType& = dwType
  3738.    Lot_GetRegKeyValueEx = GetRegKeyValueEx(hKey&,szSubKey$,_
  3739.                           szValueName$,dwType&,cbStrBuf&,dwBuf&,strBuf$)
  3740.   IF Lot_GetRegKeyValueEx = ERROR_SUCCESS AND dwType <> REG_NONE THEN
  3741.      if dwType = REG_DWORD then
  3742.       lpBuf = dwBuf
  3743.      else
  3744.       lpBuf = strBuf
  3745.      end if
  3746.   END IF
  3747. END FUNCTION
  3748. '**************************************************************************
  3749.  
  3750.  
  3751. '** Purpose:  Retrieves the alias for long dir names  
  3752. '** Author:   Greg Lutz
  3753. '** Arguments: 
  3754. '** Returns: 
  3755. '**     
  3756. '*************************************************************************
  3757. PUBLIC FUNCTION GetShortPathName(ByVal szLong$, szShort$) AS LONG
  3758.     DIM fixed$
  3759.  
  3760.     fixed$ = CreateBuffer(256)
  3761.     GetShortPathName = Lot_GetShortPathName(szLong$, fixed$, 256)
  3762. 'Print "fixed " fixed$
  3763.      If GetShortPathName& = FALSE THEN
  3764.         szShort$ = szLong$
  3765.      Else
  3766.         szShort$ = fixed$
  3767.      End If
  3768. END FUNCTION
  3769.  
  3770. '*************************************************************************
  3771. PUBLIC FUNCTION EnableWindow (ByVal hwnd&, ByVal fEnable&) AS INTEGER
  3772. '** Purpose:   Wrapper to prevent trying to enable null windows.
  3773.  
  3774.      If hwnd = 0 then
  3775.         EnableWindow = 0
  3776.     Else
  3777.         EnableWindow = WEnableWindow(hwnd,fEnable)
  3778.     End If
  3779. END FUNCTION
  3780.